卡夫卡长轮询

Posted

技术标签:

【中文标题】卡夫卡长轮询【英文标题】:Kafka long polling 【发布时间】:2013-11-04 11:14:27 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您不必每次都启用它,因为它是 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 我有同样的问题,第二件事是fetch.wait.max.ms 和我们在consumer.poll(<what is this time>)? 中提供的时间有什么区别,它们之间有什么关系吗? 属性是 'fetch.max.wait.ms' 而不是 'fetch.wait.max.ms' 至少在 Kafka 版本 2.3+ 中

以上是关于卡夫卡长轮询的主要内容,如果未能解决你的问题,请参考以下文章

卡夫卡与cloudera TLS失败

卡夫卡与风暴:卡夫卡和风暴的明智比较

卡夫卡流与卡夫卡消费者如何决定使用啥

卡夫卡:如何在卡夫卡实现循环分区

卡夫卡旋转垃圾收集日志

卡夫卡饥饿艺术家