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

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

谢谢。

【问题讨论】:

    标签: apache-kafka kafka-producer-api


    【解决方案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

    【讨论】:

    • 你能告诉我在更新的情况下应该怎么做以避免同样的事情吗?
    • 不确定您的意思?也许问一个新问题并更详细地阐述?
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多