为什么producer.send(record).get()有效但是producer.send(record,callback)不起作用

时间:2018-06-15 10:08:53

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

我正在使用kafka向消费者发送消息。但由于某种原因,当我将记录发送到producer.send(record, new MyProducerCallback());的主题时,该主题的消费者不会收到记录。但是,当我使用RecordMetadata m = producer.send(record).get();发送记录时,记录完全到达消费者。用于工作的回调方法,但它不再。有没有人遇到过这个?

2 个答案:

答案 0 :(得分:1)

你的回调将在后台线程中被触发,同时你没有阻止主线程,所以程序能够在不执行它的情况下结束。

如果您想确保调用回叫,您必须

  1. .send().get()未来
  2. Thread.sleep()主线程。
  3. 并且不要忘记close() Producer对象

答案 1 :(得分:0)

您应该检查生产者应用程序是否在Kafka生产者能够将消息放入内部队列之前结束,然后有足够的时间在后台异步发送消息。使用同步发送,您将阻止主线程,直到生产者从代理接收到ack。你能分享一下代码,你如何使用带有回调的producer.send()?