Kafka长轮询

13

我正在研究使用kafka实现低延迟消息队列,并且一直在阅读有关消费者长轮询的资料。然而,没有任何关于如何实际使用长轮询或需要设置哪些选项来启用它的示例。如何使用kafka Java API 启用长轮询?

1个回答

24

由于kafka消费者的默认行为,您无需特别启用它。您需要在配置中设置的是fetch.wait.max.ms

要实现您想要的效果,有两个重要的值:

  • fetch.min.bytes: 经纪人将等待填充此数据量后再将响应发送给消费者客户端。
  • fetch.max.wait.ms: 经纪人将等待这段时间后才向消费者客户端发送响应,除非它已经有足够的数据来填充响应(fetch.message.min.bytes)

只要达到这些值之一,响应就会发送给消费者。最长可能的获取请求时间始终为fetch.max.wait.ms

请参阅Kafka Consumer Configs以了解更多配置选项。

kafka用户邮件列表也是解决此类问题的好选择。


快速问题:假设已经经过了 fetch_max_wait_ms 时间,但我们仍未达到最小数据字节大小,那么消费者会怎么做?是继续等待还是只接受已经存在的数据? - lollerskates
1
@lollerskates 我也有同样的问题,另外fetch.wait.max.ms和我们在consumer.poll(<what is this time>)中提供的时间有什么区别?它们之间有关联吗? - Hrishikesh Mishra
在Kafka版本2.3+中,属性应该是'fetch.max.wait.ms'而不是'fetch.wait.max.ms'。 - Ashvjit Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接