组的心跳失败,因为它正在重新平衡

Posted

技术标签:

【中文标题】组的心跳失败,因为它正在重新平衡【英文标题】:heartbeat failed for group because it's rebalancing 【发布时间】:2017-03-02 22:08:15 【问题描述】:

组心跳失败的确切原因是什么,因为它正在重新平衡?在组中所有消费者都起来的情况下重新平衡的原因是什么?

谢谢。

【问题讨论】:

【参考方案1】:

检测信号是检查所有消费者是否仍在运行的基本机制。如果由于组正在重新平衡而导致心跳失败,则表明您的消费者实例发送下一个心跳的时间过长并且被认为已死,因此触发了重新平衡。

如果您想防止这种情况发生,您可以增加超时时间 (session.timeout.ms),或者确保您的消费者更频繁地发送心跳 (heartbeat.interval.ms)。心跳基本上嵌入在poll() 中,因此,您需要确保足够频繁地调用 poll。这通常可以通过限制单个轮询通过max.poll.records 返回的记录数来实现(以缩短处理所有获取的数据所需的时间)。

更新

从 Kafka 0.10.1 开始,心跳在后台线程中发送,而不是在调用 poll() 时发送(参见 https://cwiki.apache.org/confluence/display/KAFKA/KIP-62%3A+Allow+consumer+to+send+heartbeats+from+a+background+thread)。在这个新设计中,配置session.timeout.msheartbeat.interval.ms 仍然相同。此外,max.poll.interval.ms 决定了必须调用poll() 的频率。如果你在max.poll.interval.ms中错过了调用poll(),心跳线程会假设处理线程死亡,并会发送一个离开组的请求,触发重新平衡,之后心跳线程将停止发送心跳。如果你处理线程没问题但速度很慢,下一次调用poll() 将启动另一个重新平衡以再次重新加入组。

有关更多详细信息,请参阅。 Difference between session.timeout.ms and max.poll.interval.ms for Kafka >= 0.10.1

【讨论】:

你能告诉我在更新的情况下应该怎么做以避免同样的事情吗? 不确定您的意思?也许问一个新问题并更详细地阐述? 你能看看这个吗:***.com/questions/60753274/…

以上是关于组的心跳失败,因为它正在重新平衡的主要内容,如果未能解决你的问题,请参考以下文章

如何在管道中重新采样文本(不平衡组)?

绍圣--kafka之消费者(八)

在 Apache Storm 中重新平衡执行器

在Kafka阅读消息时重新平衡问题

Kafka 消费者意外地重新平衡

Infinispan CacheEntryCreated 没有在重新平衡时触发 primaryOnly = true?