Kafka 消费积压实战:Lag 从 0 飙到百万——扩容、批量、多线程消费的正确姿势
引言 凌晨 02:17,告警群连续炸了三条: [P0] consumer-group order-settle Lag 突破 200 万,持续增长中 [P0] 对账任务延迟超过 30 分钟阈值 [P1] 下游结算服务 QPS 跌至 0 值班同事打开 Grafana 一看,曲线是这样的: Lag 200万 ┤ ╱ 150万 ┤ ╱ 100万 ┤ ╱ 50万 ┤ ╱ 0 ┼━━━━━━━━━━━━━━━━━╯━━━━━━━━━━━━━━▶ 时间 23:00 01:30(上游补数据) 02:17(告警) 根因很快定位:上游订单服务 01:30 做了一次历史数据补发,把积压的 180 万条订单事件一口气灌进了 Kafka。而消费组 order-settle 的处理能力是 800 条/秒——进来的速度是处理速度的 4 倍,Lag 只涨不跌。 更要命的是,消费逻辑里每条消息都要同步调用一次下游结算接口(平均 40ms),还套着"拉取一条、处理一条、提交一条"的朴素写法。消费端不是被消息打垮的,是被自己的串行处理拖垮的。 那一晚我们用四步把 Lag 从 200 万清到 0,耗时 47 分钟: ....