mq Command

消息队列常用排障命令

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

汇总 Kafka、RabbitMQ、RocketMQ 常用排障命令,按场景速查:消费堆积、连接爆满、消息丢失、队列阻塞

适用环境Kafka / RabbitMQ / RocketMQ
风险等级
最后验证2026-07-04
建议权限普通用户

Scenario

什么时候用这组命令

这组命令适合在处理“消息队列常用排障命令”时作为第一轮检查模板。使用时先替换占位符,再在目标机器或目标 namespace 中执行,避免在错误环境里得到误导结论。

Input

你需要先准备什么

  • 先确认是生产者、Broker 还是消费者的问题,不要在三层之间盲改。
  • 保留消息 ID、offset 和故障时间点,方便和上下游日志对齐。
  • 区分消息丢失(没投递成功)和消息积压(投递了但没消费),两者根因完全不同。

Risk Notes

执行风险

  • 不要直接清空队列丢弃消息来“解决”积压,会导致业务数据丢失,应先确认积压原因。
  • 不要盲目重启 Broker,未持久化的消息和未确认的投递会丢失,重启前应确认同步状态。
  • 不要在生产环境随意调整分区数,分区扩展后不能缩减,且会影响现有消息的顺序。

Commands

命令详解

命令 1: 执行 kafka-consumer-groups.sh

用于补充“消息队列常用排障命令”的排查证据链。kafka-consumer-groups.sh 的输出需要结合上下文其他命令交叉验证,不要单独依赖某一条结果下结论。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 1: 执行 kafka-consumer-groups.sh
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group

命令 2: 执行 kafka-topics.sh

用于补充“消息队列常用排障命令”的排查证据链。kafka-topics.sh 的输出需要结合上下文其他命令交叉验证,不要单独依赖某一条结果下结论。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 2: 执行 kafka-topics.sh
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic my-topic

命令 3: 执行 kafka-log-dirs

用于补充“消息队列常用排障命令”的排查证据链。kafka-log-dirs 的输出需要结合上下文其他命令交叉验证,不要单独依赖某一条结果下结论。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 3: 执行 kafka-log-dirs
kafka-log-dirs --bootstrap-server localhost:9092 --describe --topic-list my-topic

命令 4: 执行 rabbitmqctl

用于补充“消息队列常用排障命令”的排查证据链。rabbitmqctl 的输出需要结合上下文其他命令交叉验证,不要单独依赖某一条结果下结论。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 4: 执行 rabbitmqctl
rabbitmqctl list_queues name messages messages_ready consumers state

命令 5: 执行 rabbitmqctl

用于补充“消息队列常用排障命令”的排查证据链。rabbitmqctl 的输出需要结合上下文其他命令交叉验证,不要单独依赖某一条结果下结论。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 5: 执行 rabbitmqctl
rabbitmqctl list_connections name peer_host state channels

命令 6: 执行 rabbitmqctl

用于补充“消息队列常用排障命令”的排查证据链。rabbitmqctl 的输出需要结合上下文其他命令交叉验证,不要单独依赖某一条结果下结论。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 6: 执行 rabbitmqctl
rabbitmqctl status

命令 7: 执行 mqadmin

用于补充“消息队列常用排障命令”的排查证据链。mqadmin 的输出需要结合上下文其他命令交叉验证,不要单独依赖某一条结果下结论。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 7: 执行 mqadmin
mqadmin clusterList -n 127.0.0.1:9876

命令 8: 执行 mqadmin

用于补充“消息队列常用排障命令”的排查证据链。mqadmin 的输出需要结合上下文其他命令交叉验证,不要单独依赖某一条结果下结论。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 8: 执行 mqadmin
mqadmin consumerStatus -n 127.0.0.1:9876 -g my-group

命令 9: 执行 mqadmin

用于补充“消息队列常用排障命令”的排查证据链。mqadmin 的输出需要结合上下文其他命令交叉验证,不要单独依赖某一条结果下结论。

  • 确认命令运行位置正确。
  • 保留关键输出,方便和修复后对比。
命令 9: 执行 mqadmin
mqadmin queryMsgById -n 127.0.0.1:9876 -i msgId

Workflow

建议执行顺序

按顺序执行,不要跳过确认类命令

先用只读命令确认状态,再执行会改变状态的命令。汇总 Kafka、RabbitMQ、RocketMQ 常用排障命令,按场景速查:消费堆积、连接爆满、消息丢失、队列阻塞

  • 排查 Kafka 消费堆积:先 kafka-consumer-groups.sh --describe 看 LAG 列,再 kafka-topics.sh --describe 确认分区与 leader 分布
  • 排查 RabbitMQ 队列阻塞:rabbitmqctl list_queues 看 messages_ready 与 consumers,配合 list_consumers 定位阻塞消费者
  • 排查 RabbitMQ 连接爆满:rabbitmqctl list_connections 统计来源,rabbitmqctl status 查看 file_descriptors 是否耗尽
  • 排查 RocketMQ 消息丢失:mqadmin clusterList 看集群状态,queryMsgById 追踪消息,consumerStatus 看消费与死信队列
  • 排查 MQ 节点健康:rabbitmqctl node_health_check 与 status 检查磁盘、内存水位,Kafka 用 kafka-log-dirs 查磁盘占用
  • 排查分区/副本不均衡:kafka-topics.sh --describe 统计各 broker leader 数,kafka-reassign-partitions 生成迁移方案
按顺序执行,不要跳过确认类命令
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic my-topic
kafka-log-dirs --bootstrap-server localhost:9092 --describe --topic-list my-topic

把命令输出变成结论

命令本身不是结论。每次执行后要回答:目标是否存在、状态是否异常、异常是否能解释用户看到的现象。

  • 记录关键字段,而不是整屏复制
  • 把正常路径和异常路径输出对比
  • 输出为空也要解释:是确实没有,还是权限/过滤条件不对
把命令输出变成结论
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic my-topic
kafka-log-dirs --bootstrap-server localhost:9092 --describe --topic-list my-topic
rabbitmqctl list_queues name messages messages_ready consumers state

执行前替换占位符并控制影响范围

包含 <service>、<pod>、<namespace>、<pid>、<container> 的命令必须先替换。涉及 reload、restart、KILL、vacuum、prune 的命令要确认影响范围。

  • 优先在测试环境或只读模式验证
  • 生产执行前保留回滚路径
  • 把最终可用命令写入工单或 runbook
执行前替换占位符并控制影响范围
mqadmin consumerStatus -n 127.0.0.1:9876 -g my-group
mqadmin queryMsgById -n 127.0.0.1:9876 -i msgId

Verification

怎么判断命令有效

  • 命令已在正确机器、正确用户、正确 namespace 或正确仓库下执行。
  • 输出能支撑明确判断:正常、异常、权限不足、目标不存在或需要下一跳排查。
  • 对有副作用的命令,已确认执行窗口、影响范围和回滚方式。

Prevention

沉淀到日常流程

  • 监控 lag、连接数和磁盘使用,而不是只看 Broker 是否存活,及时发现潜在问题。
  • 消费者做幂等处理,避免重复消费导致数据错乱,特别是在重试和 rebalance 场景下。
  • 设置合理的消息 TTL 和死信队列,防止异常消息无限堆积影响正常消息处理。
  • 对关键消息链路做端到端监控,从生产到消费全链路追踪,快速定位问题节点。

常见问题

不同 MQ 的排障命令都需要管理员权限吗?

大部分只读命令(describe、list)普通账号可执行;涉及修改配置、重分配、取消同步的命令需管理员权限

命令中 nameserver 或 bootstrap-server 地址怎么获取?

Kafka 用 bootstrap-server 指向任意 Broker,RocketMQ 用 -n 指向 NameServer,地址一般在集群部署配置或环境变量中查找

Long-tail SEO

你可能正在搜索这些报错

下面这些错误原文、场景词和中英文搜索词,都是排查同类问题时常见的入口。

  • kafka 排障命令
  • rabbitmq 排障命令
  • rocketmq 排障命令
  • 消息队列常用命令
  • mq 命令速查
  • kafka rabbitmq rocketmq 命令大全