mq Roadmap
消息队列排障专题
消息队列排障专题:聚合 Kafka、RabbitMQ 和 RocketMQ 的消费 lag 持续增长、消息丢失与重复、消费者频繁 rebalance、连接和 channel 泄漏、Broker 内存 flow control 等常见问题的完整排障路径。
消息队列排障先区分故障发生在生产者、Broker 还是消费者三层,再判断是消息丢失还是消息积压,两者根因和处理动作完全不同,保留消息 ID 和 offset 对齐比盲目重启 Broker 更有效。
Troubleshooting Path
推荐排障路线图
- 01
先定位故障发生在哪一层
确认是生产者没投递、Broker 没收到还是消费者没处理,保留消息 ID 和 offset 做对齐。
- 02
再看消费进度和积压
用 consumerProgress / list_queues / consumer-groups 看 lag 和消费者数,判断是消费慢还是消费者不够。
- 03
继续检查连接和分区均衡
统计连接和 channel 数排查泄漏,看分区分布和 rebalance 是否频繁导致部分消费者空转。
- 04
最后处理资源水位和持久化
确认 Broker 内存是否触发 flow control、磁盘是否撑爆、消息是否持久化,再决定重启或扩容。
Common Issues
高频问题入口
Before You Change
执行前检查
- 排查积压时不要直接清空队列丢弃消息
- 重启 Broker 前确认消息已持久化
- 消费者必须做幂等处理,避免重复消费
- 调整分区或并发前记录原值和影响范围
Start Here
优先阅读
Kafka 消费堆积排查方法
Kafka 消费组 lag 持续增大、消息堆积时,用 kafka-consumer-groups.sh --describe 查看 CURRENT-OFFSET、LOG-END-OFFSET、LAG 定位堆积分区,对比生产/消费速率判断瓶颈在消费端 GC/下游超时还是分区不均衡,再评估扩容消费者或增加分区。
排障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。
排障RabbitMQ 连接数爆满排查方法
RabbitMQ 新连接被拒绝、报 no available sockets 或 file_descriptors 耗尽时,用 rabbitmqctl list_connections 统计各来源 IP 的连接与 channel 数,找出未复用连接池、未关闭 channel 的泄漏客户端,rabbitmqctl status 查 sockets/erlang processes 上限。
排障RabbitMQ 队列阻塞排查方法
RabbitMQ 队列 messages_ready 持续增长、消费者不消费或镜像队列同步卡住时,用 rabbitmqctl list_queues 看队列状态和消费者数,list_consumers 检查 ack_required 长时间无 ack 的阻塞消费者,list_queues slave_pids 判断镜像同步进度。
Latest Updates
最近更新
All Runbooks
全部相关内容
Kafka 消费堆积排查方法
Kafka 消费组 lag 持续增大、消息堆积时,用 kafka-consumer-groups.sh --describe 查看 CURRENT-OFFSET、LOG-END-OFFSET、LAG 定位堆积分区,对比生产/消费速率判断瓶颈在消费端 GC/下游超时还是分区不均衡,再评估扩容消费者或增加分区。
排障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。
排障RabbitMQ 连接数爆满排查方法
RabbitMQ 新连接被拒绝、报 no available sockets 或 file_descriptors 耗尽时,用 rabbitmqctl list_connections 统计各来源 IP 的连接与 channel 数,找出未复用连接池、未关闭 channel 的泄漏客户端,rabbitmqctl status 查 sockets/erlang processes 上限。
排障RabbitMQ 队列阻塞排查方法
RabbitMQ 队列 messages_ready 持续增长、消费者不消费或镜像队列同步卡住时,用 rabbitmqctl list_queues 看队列状态和消费者数,list_consumers 检查 ack_required 长时间无 ack 的阻塞消费者,list_queues slave_pids 判断镜像同步进度。
排障RocketMQ 消息丢失排查方法
RocketMQ 消息发送成功但消费端收不到、疑似丢失时,用 mqadmin queryMsgById 追踪消息落盘与消费轨迹,consumerStatus 查消费组 offset,检查死信队列 %DLQ%<group> 是否堆积,并确认 Broker 是否开启同步刷盘和主从同步复制。
命令消息队列常用排障命令
Kafka、RabbitMQ、RocketMQ 消息队列排障命令速查,Kafka 用 kafka-consumer-groups.sh --describe 看 LAG 分区,RabbitMQ 用 rabbitmqctl list_queues/list_connections 看队列和连接,RocketMQ 用 mqadmin queryMsgById/consumerStatus 追踪消息与死信。