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

标签 apache-kafka kafka-producer-api

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

谢谢你。

最佳答案

心跳是检查所有消费者是否仍在运行的基 native 制。如果由于组正在重新平衡而导致心跳失败,则表明您的消费者实例发送下一个心跳的时间过长并且被认为已死,因此触发了重新平衡。
如果你想防止这种情况发生,你可以增加超时时间(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() 的频率必须调用。错过调用poll()max.poll.interval.ms 内,心跳线程假设处理线程死亡,会发送一个离开组请求触发重新平衡,之后心跳线程将停止发送心跳。如果你处理线程没问题但速度很慢,下一次调用 poll()将启动另一个重新平衡以再次重新加入该组。
有关更多详细信息,请参阅。 Difference between session.timeout.ms and max.poll.interval.ms for Kafka >= 0.10.1

关于apache-kafka - 组的心跳失败,因为它正在重新平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40162370/

相关文章:

java - Kafka 读取字段时出错 'correlation_id' : java. nio.BufferUnderflowException

apache-kafka - Kafka - 设置高 linger.ms 和 batch.size 没有帮助

apache-kafka - Kafka Streams 计算不同的值

java - AVRO 原始类型的 Serde 类

apache-kafka - 何时关闭生产者或消费者

java - 在 Kafka Streams 应用程序中,是否有一种方法可以使用输出主题的通配符列表来定义拓扑?

C++ with Kafka - 消费者刚刚收到一些生产者消息

apache-kafka - Kafka 架构注册表错误 : Failed to write Noop record to kafka store

apache-kafka - 发送大量消息 Kafka Producer

hadoop - Kafka 主题与 Kafka Connect to HDFS 合并