Kafka使用者配置中heartbeat.interval.ms和session.timeout.ms之间的区别

nov*_*von 10 apache-kafka kafka-consumer-api

我目前正在运行kafka 0.10.0.1,并且相关的两个值的相应文档如下:

heartbeat.interval.ms - 使用Kafka的组管理工具时,心跳与消费者协调员之间的预期时间.心跳用于确保消费者的会话保持活动状态,并在新消费者加入或离开群组时促进重新平衡.该值必须设置为低于session.timeout.ms,但通常应设置为不高于该值的1/3.它可以调整得更低,以控制正常重新平衡的预期时间.

session.timeout.ms - 使用Kafka的组管理工具时用于检测故障的超时.如果在会话超时期间未收到消费者的心跳,则代理会将消费者标记为失败并重新平衡该组.由于仅在调用poll()时发送心跳,因此较高的会话超时允许更多时间在消费者的轮询循环中进行消息处理,但代价是检测硬故障的时间较长.另请参阅max.poll.records以获取另一个控制轮询循环中处理时间的选项.

我不清楚为什么文档建议设置heartbeat.interval.ms为1/3 session.timeout.ms.这些值是否相同是没有意义的,因为心跳仅在poll()被调用时发送,因此当处理当前记录时?

小智 6

heartbeat.interval.ms指定用户发送心跳信号的频率。因此,如果这是3000毫秒(默认值),那么消费者将每3秒钟将心跳信号发送给代理。session.timeout.ms指定经纪人需要从消费者那里获得至少一个心跳信号的时间量。否则,它将标记消费者已死亡。默认值10000毫秒(10秒)可在经纪人将消费者标记为死亡之前丢失三个心跳信号。在高负载的网络设置中,通常会丢失一些心跳信号。因此建议在将消费者标记为死亡之前等待丢失3个心跳信号。这就是1/3建议的原因。