java - 卡夫卡 : Java client that blocks read and doesn't poll

标签 java apache-kafka

我想知道是否有一个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/

相关文章:

java - 如何在 spark streaming 中映射 kafka 主题名称和各自的记录

hadoop - 流式传输文件夹中的文件

java - Google App Engine Go-Python/Java 混合应用

java - 在 Tapestry 5 的网格中更改排序按钮的位置

java - 在构造函数重载的情况下如何同时调用 super(...) 和 this(...)?

java - JMF - 大文件 (2GB) - 无 'movi' block 错误

java - 双链表中删除方法内部的未知 for 循环?

java - Kafka Stream 的交互式调节

docker - 在docker上没有启动服务的情况下测试kafka使用者

apache-kafka - 单个分区上的多个主题?