1. RocketMQ管理命令概览
RocketMQ作为阿里巴巴开源的高性能分布式消息中间件,其命令行工具集是日常运维和问题排查的重要利器。mqadmin脚本位于RocketMQ安装目录的bin文件夹下,提供了丰富的子命令来管理Topic、Broker、Consumer等核心组件。
初次接触时,可以通过以下命令查看所有可用子命令:
sh mqadmin每个子命令都配有详细的帮助文档,例如查看updateTopic命令的使用方法:
sh mqadmin help updateTopic2. Topic管理命令详解
2.1 创建与删除Topic
创建Topic时需要指定nameserver地址和Broker地址或集群名称:
sh mqadmin updateTopic -n 127.0.0.1:9876 -b 127.0.0.1:10911 -t testTopic关键参数说明:
- -n:nameserver地址,格式ip:port
- -b:目标Broker地址(与-c二选一)
- -c:目标集群名称(与-b二选一)
- -t:Topic名称(仅支持字母、数字、下划线和短横线)
- -w:写队列数(默认8)
- -r:读队列数(默认8)
删除Topic命令:
sh mqadmin deleteTopic -n 127.0.0.1:9876 -c DefaultCluster -t testTopic注意:删除Topic只是从元数据中移除,不会立即清理磁盘上的消息文件
2.2 Topic状态查询
查看集群中所有Topic列表:
sh mqadmin topicList -n 127.0.0.1:9876获取特定Topic的详细统计信息:
sh mqadmin topicStatus -n 127.0.0.1:9876 -t testTopic输出示例:
#Broker Name #QID #Min Offset #Max Offset #Last Updated broker-a 0 0 100 2023-07-20 14:30:00 broker-a 1 0 95 2023-07-20 14:29:583. 消费者组管理
3.1 消费者进度监控
查看指定消费者组的消费进度:
sh mqadmin consumerProgress -n 127.0.0.1:9876 -g testGroup输出包含每个队列的消费差值(Diff),这是判断消息堆积的关键指标:
#Topic #Broker Name #QID #Broker Offset #Consumer Offset #Diff testTopic broker-a 0 100 85 15 testTopic broker-a 1 95 95 03.2 重置消费位点
当需要重新消费历史消息时,可以按时间戳重置消费位点:
sh mqadmin resetOffsetByTime -n 127.0.0.1:9876 \ -g testGroup -t testTopic -s "2023-07-20#00:00:00"参数说明:
- -s:支持两种格式
- 精确时间:"yyyy-MM-dd#HH:mm:ss:SSS"
- 时间戳:"currentTimeMillis"
- -f:是否强制重置(默认true)
4. 消息查询与追踪
4.1 三种消息查询方式
- 按Message ID查询:
sh mqadmin queryMsgById -n 127.0.0.1:9876 -i 0A2D2FA800002A9F0000000000000000- 按Message Key查询:
sh mqadmin queryMsgByKey -n 127.0.0.1:9876 -t testTopic -k ORDER_123- 按队列Offset查询:
sh mqadmin queryMsgByOffset -n 127.0.0.1:9876 \ -b broker-a -i 0 -t testTopic -o 504.2 消息轨迹解读
查询结果包含完整消息元数据:
Topic: testTopic Tags: [PAYMENT] Keys: [ORDER_123] Queue ID: 0 Queue Offset: 50 CommitLog Offset: 1024 Born Timestamp: 2023-07-20 14:25:30 Store Timestamp: 2023-07-20 14:25:31 Born Host: 192.168.1.100:4321 Store Host: 192.168.1.101:109115. 集群运维命令
5.1 集群状态检查
查看集群节点状态:
sh mqadmin clusterList -n 127.0.0.1:9876增加-m参数显示更多统计信息:
sh mqadmin clusterList -n 127.0.0.1:9876 -m输出示例:
#Cluster Name #Broker Name #InTPS #OutTPS #InTotalToday #OutTotalToday DefaultCluster broker-a 500 480 120000 115200 DefaultCluster broker-b 520 500 124800 1200005.2 Broker配置管理
动态更新Broker配置(无需重启):
sh mqadmin updateBrokerConfig -n 127.0.0.1:9876 \ -b 127.0.0.1:10911 -k flushDiskType -k SYNC_FLUSH常用可动态修改参数:
- flushDiskType:刷盘方式(ASYNC_FLUSH/SYNC_FLUSH)
- maxMessageSize:最大消息大小(默认4MB)
- flushInterval:异步刷盘间隔(默认500ms)
6. 生产环境问题排查实战
6.1 消息堆积快速定位
- 首先确认哪些消费者组有堆积:
sh mqadmin consumerProgress -n 127.0.0.1:9876- 查看具体消费者组连接情况:
sh mqadmin consumerConnection -n 127.0.0.1:9876 -g testGroup- 检查消费者线程堆栈:
jstack <consumer_pid>6.2 消息丢失排查步骤
- 确认消息是否成功存储:
sh mqadmin queryMsgByKey -n 127.0.0.1:9876 -t testTopic -k ORDER_123- 检查Broker存储状态:
sh mqadmin brokerStatus -n 127.0.0.1:9876 -b 127.0.0.1:10911- 验证消费者位点:
sh mqadmin getConsumerStatus -n 127.0.0.1:9876 \ -g testGroup -t testTopic7. 高级运维技巧
7.1 平滑关闭Broker
- 先停止消息写入:
sh mqadmin wipeWritePerm -n 127.0.0.1:9876 -b 127.0.0.1:10911- 等待消费完成:
sh mqadmin consumerProgress -n 127.0.0.1:9876- 安全关闭:
sh mqshutdown broker7.2 跨机房容灾配置
- 设置机房权重:
sh mqadmin updateBrokerConfig -n 127.0.0.1:9876 \ -b 127.0.0.1:10911 -k brokerWeight -v "100@zoneA,80@zoneB"- 配置同步复制:
sh mqadmin updateBrokerConfig -n 127.0.0.1:9876 \ -b 127.0.0.1:10911 -k brokerRole -v SYNC_MASTER8. 命令使用注意事项
- 生产环境操作建议:
- 修改Topic配置前先备份原配置
- 删除Topic前确认无消费者使用
- 重置位点操作需在业务低峰期进行
- 性能影响:
- 消息查询类命令会触发磁盘IO
- 频繁执行管理命令会增加Nameserver负载
- 建议对运维操作进行审计记录
- 常见问题处理:
- 命令执行报错时先检查网络连通性
- 参数格式错误会导致沉默失败
- 部分命令需要管理员权限