Apache kafka 卡夫卡消费者是在poll()上旋转还是被经纪人的广播/信号吵醒?
如果我在Apache kafka 卡夫卡消费者是在poll()上旋转还是被经纪人的广播/信号吵醒?,apache-kafka,kafka-consumer-api,Apache Kafka,Kafka Consumer Api,如果我在语句中poll()来自消费者,而在语句中为True:时,我看到poll()正在阻塞。如果消费者最新收到主题中的消息(offset=offset\u END),消费者是如何进行阻止的poll() 消费者默认值是否遵循一种发布/订阅心态,在这种心态下,它会睡觉,等待发布和来自代理的广播/信号 还是消费者在不断地旋转自己,检查话题 如果有必要的话,我正在使用汇合python客户端 谢谢 kafka使用者基本上是长轮询循环,由调用poll()的用户线程(异步)驱动 整个协议是请求-响应的,完全由
语句中poll()
来自消费者,而在语句中为True:
时,我看到poll()
正在阻塞。如果消费者最新收到主题中的消息(offset=offset\u END
),消费者是如何进行阻止的poll()
消费者默认值是否遵循一种发布/订阅心态,在这种心态下,它会睡觉,等待发布和来自代理的广播/信号
还是消费者在不断地旋转自己,检查话题
如果有必要的话,我正在使用汇合python客户端
谢谢 kafka使用者基本上是长轮询循环,由调用poll()的用户线程(异步)驱动
整个协议是请求-响应的,完全由客户机驱动。没有经纪人发起的“推送”形式
fetch.max.wait.ms控制任何单个代理在响应之前的等待时间(如果没有数据),而用户线程的阻塞由poll()的参数控制。是的,您是对的,它是一个真正的条件,等待使用消息直到等待超时时间。
如果收到消息,它将立即返回,否则它将等待超时并返回空记录
Kafka Broker使用以下参数控制要发送给消费者的消息
fetch.min.bytes:代理将等待填充此数量的数据,然后再将响应发送给消费者客户端
fetch.wait.max.ms:代理将在向消费者客户端发送响应之前等待这段时间,除非它有足够的数据来填充响应(fetch.message.max.bytes)
由于处理已使用的消息,调用下一个poll()可能需要很长时间。max.poll.interval.ms阻止不处理花费如此多的时间,并在max.poll.interval.ms内调用下一次轮询,否则消费者将离开组并触发重新平衡。
你可以得到更多的细节
max.poll.interval.ms:通过增加预期轮询之间的间隔,您可以给消费者更多的时间来处理一批轮询
从轮询返回的记录(长)。缺点是增加这一点
值可能会延迟组重新平衡,因为使用者将只加入
投票呼吁中的重新平衡。您可以使用此设置来
限制完成再平衡的时间,但如果
消费者实际上无法足够频繁地调用poll
max.poll.records:使用此设置将单个调用返回的总记录限制为轮询。这可以让你更容易理解
预测每个轮询间隔内必须处理的最大值。通过
调整此值后,您可以减少轮询间隔,这将
将减少集团再平衡的影响
max.poll.interval.ms不是poll返回所需的时间,而是允许用户在后续调用之间进行poll的时间。我的措辞似乎让您感到困惑。我做了一点更新来澄清