卡夫卡制片人太慢了

时间:2018-02-02 11:03:48

标签: java apache-kafka

我正在尝试通过spark框架将请求响应日志存储在我的Kafka队列中。

我使用的依赖关系:

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql-kafka-0-10_2.11</artifactId>
            <version>2.1.1</version>
        </dependency>

代码:

private static void startKafkaProducer() {

        Properties props = new Properties();
        props.put("bootstrap.servers", _properties.getProperty("broker.request"));
        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeSerializer");
        props.put("acks", "0");
        props.put("retries", 0);
        props.put("batch.size", 1);
        props.put("enable.auto.commit", false);

        _producer = new KafkaProducer<>(props);
        System.out.println("\n\n\n\n\n\n>>>>>>>>\nstartKafkaProducer()\n>>>>>>>>\n\n");
    }

    public static void routeToKafka(String incomingrequest, String optionalEsId, String topic) {
        try {
            System.out.println("\n\n\n\n\n\n>>>>>>>>\nrouteToKafka()\n>>>>>>>>\n\n");
            System.out.println("Request: " + incomingrequest);
            System.out.println("topic: " + topic);
            _producer.send(new ProducerRecord<>(topic, incomingrequest));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

我的用例限制我一次只发送一条消息 - 这就是我的服务器收到请求后我处理它并计算响应,这几乎不需要1毫秒然后我将其排入Kafka,我的惊奇每次需要6000毫秒或更多。

我在我的其他项目中使用类似的代码,尽管键和值序列化器/反序列化器在那里工作得更快。

以下是我尝试添加记录的方法,这是一个普通的JSON字符串。

routeToKafka(dataset.toJSON().toString(), null, PREDICT_TOPIC);

我在这里遗漏了一些东西,因为添加队列会阻止我的HTTP请求响应,而我愿意为上述调用启动一个单独的线程,但延迟似乎很大。

0 个答案:

没有答案