← 每日面试题 学习看板

假设你收到告警,某个消费组消息堆积从1000涨到100万,你会按照什么步骤排查?请模拟一次线上排查过程。

面试题/01实践场景题/问题排查/假设你收到告警,某个消费组消息堆积从1000涨到100万,你会按照什么步骤排查?请模拟一次线上排查过程。.md

面试记录 2026-09-22

题目:假设你收到告警,某个消费组消息堆积从 1000 涨到 100 万,你会按照什么步骤排查?请模拟一次线上排查过程。

难度:high

标签:practice/debug, mq/rocketmq, mq/kafka, architecture/resilience, network/debug, difficulty/high

评分:⭐⭐⭐☆☆(3/5)

我的回答

从整个链路上来说,消息发生了堆积,要么是生产者大量生产了消息,要么是消费者出现了消费异常。先确认一下两边的情况,确认消息具体的一段时间内的增长情况,是否做了,产生了大量增长。其次确认一下消费者消费端的消费量是否正常。然后是因为生产者产生大量消息导致的堆积,还是因为消费者出现了异常,无法正常消费导致的消息堆积。然后确认了这个情况之后,再去根据得到的结果,如果是生产者。生产大量消息,这时候考虑进行把进行把消息转移,然后进行扩容消费者。如果是消费者端消费的能力出现了问题,检查消费者端到底出现了什么问题,是服务出现异常情况,是否需要重启,需要哪些异常处理。

点评

优点:

不足:

补充(完整排查流程):

完整讲解

第一部分:知识重点剖析

核心考点定位:考察系统性排查能力——不是知识点的记忆,而是从"收到告警"到"定位根因"到"制定方案"的完整工程思维。

知识点拆解:

  1. 第一步:确认现象(10 分钟内)
  1. 第二步:分场景定位
  1. 第三步:常见根因分类
  1. 第四步:解决方案分级
  1. 关键陷阱:
从「确认现象」→「分场景定位」→「根因分类」→「分级方案」,构成完整排查链条。

第二部分:考察方向与延伸递进

考察方向:

延伸递进的顺序排查流程(生产实战):

  1. kafka-consumer-groups.sh --describe --group <group> 看 Lag 分布
  2. 看消费者进程是否存活、Rebalance 频率
  3. 看消费者 Pod 状态(OOM、CPU、GC 日志)
  4. 看下游依赖(DB 慢查询、外部 API 响应时间)
  5. 看 Kafka Broker 状态(磁盘、副本同步、Controller 稳定性)
  6. 看 Producer 侧(是否突发大量消息)

延伸递进面试题:

  1. 堆积 100 万消息,业务方要求 10 分钟内追平,怎么做?
  1. 堆积集中在某一个分区,怎么排查?
  1. Rebalance 频繁导致堆积,怎么解决?

第三部分:面试者参考回答(300-600 字口语化)

面试官您好,收到堆积告警后,我会按"确认现象 → 分场景定位 → 找根因 → 分级方案"这四步走。

第一步是确认现象。我用 kafka-consumer-groups.sh --describe --group <group> 看每个分区的 Lag 分布。堆积 100 万到底是均匀分布还是集中在某个分区,这决定了后续排查方向。同时看堆积增长速度,是线性还是指数增长,指数增长往往是正反馈问题。

第二步是分场景定位:

如果是堆积均匀增长,说明消费者整体处理慢,重点查 Consumer 侧:下游 DB 慢查询、外部 API 超时、线程池打满、JVM FullGC、业务逻辑死锁、幂等去重表锁竞争。同时看 Rebalance 频率,如果 Rebalance 频繁,整个组会周期性暂停消费。

如果是堆积集中在某个分区,重点查该分区:消息 Key 是否特殊、消息体是否异常大、消费逻辑是否有死锁、消费者是否被正确分配到该分区。

如果是堆积突然从 0 到 100 万,重点查:Producer 侧是否突发大量消息(下游积压、批量任务、重试风暴)、Consumer 组是否突然崩溃、Rebalance 是否触发。

第三步是根因分类:

Consumer 侧:下游依赖问题、JVM 问题(FullGC、OOM)、业务逻辑问题、配置问题(max.poll.records 太大)、网络问题。

Producer 侧:突发大量消息、重试风暴。

Kafka 集群侧:Broker 磁盘满、副本同步慢、Controller 频繁切换。

第四步是分级方案:

数据不能丢(P0):扩容消费者(注意分区数上限,消费者数不能超分区数)、限流生产者、下游扩容或优化、消费端保证幂等。

可以延迟(P1):降级消费逻辑、临时跳过非核心消息。

可以丢弃(P2):跳过堆积消息(--to-latest 或修改 offset)。

这里有几个坑要注意:第一,消费者数超过分区数是无效的,扩容前先确认分区数;第二,Rebalance 期间整个组会暂停消费,几秒到几十秒的堆积是正常的;第三,堆积恢复时可能重复消费,消费端必须做幂等;第四,扩容分区会改变消息路由,需要评估对顺序性的影响。

日常还要做好堆积告警、自动化预案、定期演练,让问题在早期被发现。


面试记录 2026-10-14(第 2 次)

题目:假设你收到告警,某个消费组消息堆积从 1000 涨到 100 万,你会按照什么步骤排查?请模拟一次线上排查过程。

难度:high

标签:practice/debug, mq/rocketmq, mq/kafka, architecture/resilience, network/debug

评分:⭐⭐⭐⭐☆(4/5)

练习次数:2

我的回答

首先确认整个链路是怎么回事。我们以 Kafka 为例,整个消息的链路应该是,生产者生成->broker->消费者消费;

出现堆积主要可能性就只有两个,1 是生产者创建的消息出现波动创建了大量等消息,下有消费者消费能力没有能提高,这时候按原本消费的能力去消费,就产生了大量的堆积。

这里要处理的,就是消费者方面,要进行扩容也好,提升消费能力也好,主要的是要把消费能消费的能力提上来,快速的把这些消息消费掉。如果是有序的消息,就只能控制消费者了。的提升自身能力。如果是无序的消息,可以考虑把消息先转到另一个 Topic 上。然后再缓慢地进行分流处理。

2 是消费者出现问题,生产者的生产速度没有变动,但是消费者的消费能力出现大幅降低,导致原有的消息进行堆积。这时候要排查的是消费者为什么出现问题,是出现了业务侧的数据库能力异常,还是消费者本身的 ZVM 或者是其他的消费的整个消费者出现了卡顿。然后消费者是否出现了特殊的情况,比如大量的 GC,或者是网络中断之类的情况导致消息积压。这时候就要针对的处理消费者自身的问题,可以先把所有的 Topic 消息转移到一个新的消息 Topic 上,然后进行临时处理,然后去处理消费者上的问题。处理好之后,恢复正常的消费能力,再慢慢的消费积压的消息。从新的 Topic,原来的备用的 Topic 上,把它的积压的消息消费掉,以及顺序的消费新的消息。

要区分是生产者还是消费者的问题,可以通过监控看生产者跟消费者的 TPS 具体是怎么样的。如果生产者的 TPS 生产特别变动特别大,提高特别高,那就是生产端出现了大的波峰的请求。如果是消费者的 TPS 变低了,那就是消费者自身出现了问题,对应的再进行上述的排查和处理

点评

优点:

不足:

补充:

ℹ️ 完整讲解见上方首次记录(2026-09-22)