我正在使用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
是否缺少任何生产者配置?
答案 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());
}
});