首页/数据/数据工程与 ETL 速查/消费积压 Lag 排查流程
Kafka64 条

消费积压 Lag 排查流程

积压排查按“范围—成员—分布—集群”四步:先确认是整体还是局部,再看消费者是否在线与再均衡,然后看分区倾斜与 broker 健康,最后定位是消费慢还是生产突增。

积压排查的思路

Lag 增长只是结果,原因分布在四个层次:消费者成员是否齐全、分区分配是否均衡、单个分区是否存在热点、以及集群副本是否健康。按「范围—成员—分布—集群」的顺序走一遍,能在几分钟内把方向收窄到一类原因,而不是在客户端与服务端之间来回猜。

先分清生产突增还是消费变慢

两种情况的处置完全不同:生产突增属于容量问题,扩容或临时加并行度即可;消费变慢多半是下游依赖变慢(数据库写入、外部接口超时)或消费逻辑变重。看生产速率曲线与消费速率曲线的关系,是区分二者的第一步。

基本信息

第一步组级概览:确认 lag 规模与分区分布
第二步成员视图:确认成员数、分配是否完整
第三步分区维度:判断是热点倾斜还是整体落后
第四步集群维度:确认副本健康与 Broker 负载
关键原则先看分区数再看消费者数,先看下游再优化消费端

四步排查清单

  • 组级概览:describe 看每分区 lag,确认是全局上涨还是个别分区独高
  • 成员核对:--members --verbose 确认消费者数量与分区分配是否完整、有无闲置成员
  • 再均衡检查:看组状态是否长时间停留在 rebalance,以及 max.poll.interval.ms 是否被处理耗时突破
  • 热点确认:个别分区 lag 远高于其他时,检查分区键是否倾斜或存在大量空键
  • 集群侧确认:under-replicated 分区数量、Broker 磁盘 IO 与网络是否异常
  • 下游确认:数据库写入耗时、外部接口响应时间是否同步变慢

四步排查命令

四步排查命令
# 1) 组级概览:逐分区位移与 lag
kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
  --describe --group order-consumer

# 2) 成员与分配是否正常:成员数、每人分到哪些分区
kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
  --describe --group order-consumer --members --verbose

# 3) 组状态:Stable 正常,长期 PreparingRebalance 说明再均衡反复
kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
  --describe --group order-consumer --state

# 4) 集群侧副本健康:有掉队副本说明 Broker 可能同时承压
kafka-topics.sh --bootstrap-server localhost:9092 --describe --under-replicated-partitions

现象与方向

现象大概率原因动作
全部分区均匀上涨消费能力不足或下游变慢先查下游耗时,再考虑扩容消费者与分区
个别分区独高热 key 导致分区倾斜调整分区键或把热点单独处理
lag 锯齿状波动频繁再均衡或处理超时核对 max.poll.interval.ms 与单批处理耗时
消费者无分配分区数、组名或订阅不一致核对分区数、group.id 与订阅的主题名
生产与消费速率同时波动上游流量突增按峰值扩容,必要时临时提高并行度
再均衡是 lag 锯齿的常见来源:一批消息处理时间超过 max.poll.interval.ms 会被踢出组,重新入组后又从头拉取未提交的部分,形成「重复处理 + 位移推进缓慢」的循环。
盲目扩容消费者是常见误操作:分区数不足时新增实例不承担任何分区,lag 毫无变化;扩容前必须先看分区数与分配结果。

易错点

  • 先扩容消费者再看分区数:分区不足时新增实例完全不分担负载,问题依旧
  • 忽略下游数据库或外部接口的耗时变化,在消费端做了大量无效优化
  • 把 lag 归因于 Kafka 性能:多数积压来自消费逻辑变重或下游变慢,先看处理链路再怀疑集群
  • 排查时不记录采样时间与位移快照,无法算出消费速率,只能凭感觉判断

数据来源与参考

  • Apache Kafka 官方文档:Consumer Lag 监控与运维实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌