我有一个Kafka应用程序,在该应用程序中,使用者正在轮询消息。每个消息处理大约需要30-40分钟。我调优了以下设置,以使我的使用者实例不会因消息处理时间过长而从组中移除:
max.poll.interval.ms:3600000
max.poll.records = 1但是,我在日志中仍然得到了很多以下的再平衡信息:
2022-07-04 12:17:54,168 INFO thread=kafka-coordinator-heartbeat-thread | periodicSync o.a.k.c.c.i.AbstractCoordinator:1054 : [Consumer clientId=consumer-periodicSync-5, groupId=periodicSync] Attempt to heartbeat failed since group is rebalancing
[Consumer clientId=consumer-periodicSync-5, groupId=periodicSync] Attempt to heartbeat failed since group is rebalancing我还需要做其他的设置吗?我经常收到这样的消息,我不知道它会如何影响应用程序的工作。
发布于 2022-07-05 03:06:27
在这里,使用者和代理之间的会话超时也起着至关重要的作用。您的使用者可能正在接受默认的session.timeout.ms。请相应调整一下。
session.timeout.ms
消费者在仍然被认为活着的情况下可能与经纪人失去联系的时间默认为3秒。如果超过session.timeout.ms,而消费者没有向组协调器发送心跳,则它被视为已死,并且组协调器将触发使用者组的再平衡,以便将分区从死消费者分配给组中的其他消费者。此属性与heartbeat.interval.ms密切相关。heartbeat.interval.ms控制KafkaConsumer轮询()方法向组协调器发送心跳的频率,而session.timeout.ms则控制消费者不发送心跳的时间。因此,这两个属性通常是模块化的-heatbeat.interval.ms必须低于session.timeout.ms,并且通常设置为超时值的三分之一。所以如果session.timeout.ms是3秒,heartbeat.interval.ms应该是1秒.设置低于默认的session.timeout.ms将使使用者组能够更快地检测失败并从故障中恢复,但也可能会导致不必要的重新平衡,因为使用者需要更长时间才能完成轮询循环或垃圾收集。设置较高的session.timeout.ms将减少意外的再平衡的机会,但也意味着它将需要更长的时间来发现一个真正的失败。
https://stackoverflow.com/questions/72858090
复制相似问题