mq Roadmap

消息队列排障专题

消息队列排障专题:聚合 Kafka、RabbitMQ 和 RocketMQ 的消费 lag 持续增长、消息丢失与重复、消费者频繁 rebalance、连接和 channel 泄漏、Broker 内存 flow control 等常见问题的完整排障路径。

消息队列排障先区分故障发生在生产者、Broker 还是消费者三层,再判断是消息丢失还是消息积压,两者根因和处理动作完全不同,保留消息 ID 和 offset 对齐比盲目重启 Broker 更有效。

mqkafkarabbitmqrocketmqlag积压
排障 / 命令6
精选入口4
工具 / 速查1
最近更新2026-07-04

Troubleshooting Path

推荐排障路线图

提交问题 →
  1. 01

    先定位故障发生在哪一层

    确认是生产者没投递、Broker 没收到还是消费者没处理,保留消息 ID 和 offset 做对齐。

  2. 02

    再看消费进度和积压

    用 consumerProgress / list_queues / consumer-groups 看 lag 和消费者数,判断是消费慢还是消费者不够。

  3. 03

    继续检查连接和分区均衡

    统计连接和 channel 数排查泄漏,看分区分布和 rebalance 是否频繁导致部分消费者空转。

  4. 04

    最后处理资源水位和持久化

    确认 Broker 内存是否触发 flow control、磁盘是否撑爆、消息是否持久化,再决定重启或扩容。

Before You Change

执行前检查

  • 排查积压时不要直接清空队列丢弃消息
  • 重启 Broker 前确认消息已持久化
  • 消费者必须做幂等处理,避免重复消费
  • 调整分区或并发前记录原值和影响范围

Start Here

优先阅读

Latest Updates

最近更新

All Runbooks

全部相关内容

排障

Kafka 消费堆积排查方法

Kafka 消费组 lag 持续增大、消息堆积时,用 kafka-consumer-groups.sh --describe 查看 CURRENT-OFFSET、LOG-END-OFFSET、LAG 定位堆积分区,对比生产/消费速率判断瓶颈在消费端 GC/下游超时还是分区不均衡,再评估扩容消费者或增加分区。

kafka消费堆积consumer-lag
排障

Kafka 分区不均衡排查方法

Kafka 分区 leader 集中在少数 broker 造成热点、消费者组频繁 rebalance 时,用 kafka-topics.sh --describe 统计各 broker leader 分布,再通过 kafka-reassign-partitions --generate/--execute/--verify 重新分配分区,rebalance 频繁则查 session.timeout.ms 与 max.poll.interval.ms。

kafka分区rebalance
排障

RabbitMQ 连接数爆满排查方法

RabbitMQ 新连接被拒绝、报 no available sockets 或 file_descriptors 耗尽时,用 rabbitmqctl list_connections 统计各来源 IP 的连接与 channel 数,找出未复用连接池、未关闭 channel 的泄漏客户端,rabbitmqctl status 查 sockets/erlang processes 上限。

rabbitmq连接数channel
排障

RabbitMQ 队列阻塞排查方法

RabbitMQ 队列 messages_ready 持续增长、消费者不消费或镜像队列同步卡住时,用 rabbitmqctl list_queues 看队列状态和消费者数,list_consumers 检查 ack_required 长时间无 ack 的阻塞消费者,list_queues slave_pids 判断镜像同步进度。

rabbitmq队列阻塞镜像队列
排障

RocketMQ 消息丢失排查方法

RocketMQ 消息发送成功但消费端收不到、疑似丢失时,用 mqadmin queryMsgById 追踪消息落盘与消费轨迹,consumerStatus 查消费组 offset,检查死信队列 %DLQ%<group> 是否堆积,并确认 Broker 是否开启同步刷盘和主从同步复制。

rocketmq消息丢失死信队列
命令

消息队列常用排障命令

Kafka、RabbitMQ、RocketMQ 消息队列排障命令速查,Kafka 用 kafka-consumer-groups.sh --describe 看 LAG 分区,RabbitMQ 用 rabbitmqctl list_queues/list_connections 看队列和连接,RocketMQ 用 mqadmin queryMsgById/consumerStatus 追踪消息与死信。

mqkafkarabbitmq