记录一下那天晚上的排查过程。confluent-kafka 2.4 消费一批 500 条做摘要,单批要跑 6 分钟,日志里反复出现 CommitFailedError: Commit cannot be completed since the group has already rebalanced,下游报表当天出现了重复记录,把批量降到 100 条只是频率变低。

刚开始盯着「处理里同步调模型单条就要 700ms」,折腾了半个多小时,排掉了。

排查方向其实有限,先把可能性排一排。max.poll.interval.ms 默认只有 5 分钟。也可能是max.poll.records 一次 500 条太多。

少数情况下是偏移提交放在 finally 失败后没有重试。

动手时先查消费组当前配置

kafka-configs.bat --bootstrap-server localhost:9092 --describe --group digest-worker

再往下把间隔提到 15 分钟并下调批量

python -c "print({'max.poll.interval.ms':900000,'max.poll.records':50})"

随后用 pause 与 resume 控制拉取节奏

python consumer.py --max-poll-records 50 --pause-after-10

末了改手动提交并记录提交失败

python consumer.py --enable-auto-commit false --commit-retry 3

同一份数据我导出了两份,一份留底,一份拿来试。

别只看报错消失,验证要多做一步。连续跑三批没有 rebalance 日志,偏移提交成功,下游按主键去重后行数与输入一致。

容易忽略的是,调大 poll 间隔只能让 rebalance 变少,真正稳的做法是把长任务挪出消费线程再提交偏移。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189