消费线程抛 CommitFailedException: Commit cannot be completed since the group has already rebalanced。日志里能对上时间点,这种反而好排。
处理时间超过了 max.poll.interval.ms,分区已经被别的消费者拿走,这时再拿旧的 assignment 提交位移必然失败,重试也没用。这一点先确认清楚,后面就不用反复试。
# consumer.properties enable.auto.commit=false max.poll.records=100 max.poll.interval.ms=300000 # 业务处理成功后调用 commitSync()
「Kafka 位移提交失败」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
处理上按这个顺序:把 poll 之后的业务处理压到秒级 不要在循环里做重活;位移改成处理完成后同步提交 同时把自动提交关掉;实在压不下去就调大间隔 并把 max.poll.records 减小。
结果对不对很好判断,日志里不再出现 CommitFailedException,重启后从上次位点继续。
