消费者日志反复打 Attempt to heartbeat failed since group is rebalancing,消费每隔几分钟就停一次,位移也提交不上。日志里能对上时间点,这种反而好排。
单次 poll 之后处理耗时超过 max.poll.interval.ms,消费者被踢出组又重新入组,如此反复循环,消费就再也停不下来。这一点先确认清楚,后面就不用反复试。
# consumer.properties max.poll.records=200 max.poll.interval.ms=600000 session.timeout.ms=45000 group.instance.id=order-consumer-1
这次卡住的地方就在「Kafka rebalance 超时」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
处理上按这个顺序:把单批消息拆成小段 或把 max.poll.interval.ms 调到十分钟;让 session.timeout.ms 落在 broker 允许的区间内;给每个实例配 group.instance.id 做静态成员 减少重平衡。
结果对不对很好判断,连续跑半小时不再出现 rebalancing 日志,lag 一路回落不反弹。
