Apache Kafka Java Producer Scala Consumer缺少流

时间:2016-11-02 05:55:57

标签: java apache-kafka kafka-consumer-api kafka-producer-api

我正在使用Apache Kafka。我创建了一个war文件,其中生成器用Java编码,而Consumer用Scala编码。制作人从HTML页面获取数据。我可以看到生产者发布的大部分数据都可以在消费者身上找到,但是有些数据丢失了。

这是我的生产者代码

文件1

package com.cts.rest;

import java.util.Properties;

import kafka.producer.ProducerConfig;

public class Configuration {

static ProducerConfig setKafkaProducerParameter() {
    Properties properties = new Properties();
    properties.put("zk.connect", "localhost:2181");
    properties.put("metadata.broker.list", "localhost:9092");
    properties.put("serializer.class", "kafka.serializer.StringEncoder");
    properties.put("acks", 0);  
    ProducerConfig producerConfig = new ProducerConfig(properties);
    return producerConfig;
    }

}

文件2

package com.cts.rest;

import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;


public class RTTSKProducer {

static void sendDataToProducer(String line){

    ProducerConfig producerConfig = configuration.setKafkaProducerParameter();
    Producer<String, String> producer = new Producer<String, String>(producerConfig);       

    String topic = "jsondata";      
    KeyedMessage<String, String> msg = new KeyedMessage<String, String>(topic, line);
    System.out.print(msg);
    producer.send(msg);
    producer.close();
            }
    }

现在我正在使用以下命令检查消费者的消息。

bin\windows\kafka-console-consumer.bat --zookeeper localhost:2181 --topic jsondata --from-beginning

是否缺少任何生产者配置?

1 个答案:

答案 0 :(得分:1)

你可以尝试增加“回答”。配置以确保更耐用。最重要的是,您应该调用“发送”#39;带有回调函数的方法来处理那些未成功发布到Kafka的消息,如下所示:

producer.send(myRecord,
           new Callback() {
               public void onCompletion(RecordMetadata metadata, Exception e) {
                   if(e != null)
                       e.printStackTrace();
                   System.out.println("The offset of the record we just sent is: " + metadata.offset());
               }
           });