我想知道是否有一个java客户端代码是一个Kafka Consumer,它能够通过推送通知/阻塞读取来读取数据,而不是当前的轮询:
final KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);
consumer.subscribe(Arrays.asList("test"));
new Thread(){
@Override
public void run()
{
while (true)
{
ConsumerRecords<String, String> records = consumer.poll(100); //poll
for (ConsumerRecord<String, String> record : records)
{
System.out.printf("offset = %d, key = %s, value = %s", record.offset(), record.key(),
record.value());
System.out.println();
callback.onMessage(record.value());
}
}
}
}.start();
最佳答案
如果我正确理解你的问题,你希望数据可用时推送给消费者,而不是让消费者负责检查新数据并拉取。
在https://kafka.apache.org/08/design.html
上,他们讨论了推送与拉取以及在 Kafka 中做出的选择,其中生产者将消息推送到代理并消费者从经纪人处拉取。他们还提到了他们为防止基于拉动的方法的缺点所做的尝试。如果您需要推送发布/订阅消息系统,您可能需要查看 Scribe 或 Flume,链接中也提到了:)
关于java - 卡夫卡 : Java client that blocks read and doesn't poll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35177223/