1. 前言

本文主要为RocketMQ的大部分客户端运维命令的基本使用示例,文中使用的参数为最少必须参数,相关参数会有简单介绍。

本文说明的命令基于RocketMQ的3.5.8版本,有些命令可能在更低版本中并不存在。

运维命令脚本放在bin目录下。

本文使用的测试集群为2m-noslave集群。

笔者会尽量把大部分的命令举例说明,但是每个命令的具体参数说明,请通过--help查看或者查阅其它相关资料。

2. 命令简单示例及说明

1、updateTopic

该命令执行会在broker所在机器创建一个新的topic,若topic已存在,则会更新topic的属性

命令示例:

sh mqadmin updateTopic -t TopicTest -c DefaultCluster -n 192.168.0.1:9876 mqadmin updateTopic -t TopicTest -c DefaultCluster -n 192.168.0.1:9876

操作结果:

create topic to 192.168.0.1:10911 success.create topic to 192.168.0.2:10911 success.TopicConfig [topicName=TopicTest, readQueueNums=8, writeQueueNums=8, perm=RW-, topicFilterType=SINGLE_TAG, topicSysFlag=0, order=false

  • 创建topic时使用-b参数指定broker的地址,可以指定在哪个broker上创建。如果使用-c参数指定集群名称,则可以为该集群上的每一个broker都创建一份topic信息。建议使用-c指定集群名称,减少分别在不同的broker上创建手误导致topic属性不同的概率,如果是对集群扩容,则可以通过指定新的broker地址在扩容的机器上创建一份新的topic信息

  • 使用该命令创建topic的读写队列数默认为8,可以通过-r -w指定topic的读写队列数。注意:该命令创建topic的默认队列数无法通过任何配置更改,除非修改源码。

  • 其它参数说明查看--help

 

2、updateSubGroup

该命令执行会在broker所在机器创建一个新的订阅组,若订阅组已存在,则会更新订阅组的属性

命令示例:

sh mqadmin updateSubGroup -c DefaultCluster -g TopicTestGroup -n 192.168.0.1:9876 mqadmin updateSubGroup -c DefaultCluster -g TopicTestGroup -n 192.168.0.1:9876

操作结果:

create subscription group to 192.168.0.1:10911 success.create subscription group to 192.168.0.2:10911 success.SubscriptionGroupConfig [groupName=TopicTestGroup, consumeEnable=true, consumeFromMinEnable=false, consumeBroadcastEnable=false, retryQueueNums=1, retryMaxTimes=16, brokerId=0, whichBrokerWhenConsumeSlowly=1]

  • 创建订阅组时使用-b参数指定broker的地址,可以指定在哪个broker上创建。如果使用-c参数指定集群名称,则可以为该集群上的每一个broker都创建一份新的订阅组信息。建议使用-c指定集群名称,减少分别在不同的broker上创建订阅组时手误导致每个机器上的订阅组属性不同的概率,如果是对集群扩容,则可以通过指定新的broker地址在扩容的机器上创建一份新的订阅组信息

  • 不指定消费模型时,默认为集群消费

  • 创建该订阅组时并不会同时创建重试topic,但是该订阅组第一次订阅topic成功时,会创建一个重试topic

  • 其它参数说明使用--help查看

 

3、deleteTopic

从Broker和Name Server删除Topic

命令示例:

sh mqadmin deleteTopic -t TopicTest -c DefaultCluster -n 192.168.0.1:9876 mqadmin deleteTopic -t TopicTest -c DefaultCluster -n 192.168.0.1:9876

操作结果:

delete topic [TopicTest] from cluster [DefaultCluster] success.delete topic [TopicTest] from NameServer success

 

该命令执行完成后会将指定集群下的所有broker节点的topic信息删除,并清除指定地址的name server上该topic的路由信息。所以name server是一个集群的话,请指定集群地址,否则未指定的name server的topic路由信息可能经过broker一个心跳时间后清除。未被清除的那段时间内,生产者依然可以从name server上获取到topic路由信息,正常发送消息。但是发送过程中不会有异常,broker接收到消息处理的时候才会失败,并将结果响应给客户端。

 

4、deleteSubGroup

从Broker删除订阅组

命令示例:

sh mqadmin deleteSubGroup -g topicTestGroup -c DefaultCluster -n 192.168.0.1:9876 mqadmin deleteSubGroup -g topicTestGroup -c DefaultCluster -n 192.168.0.1:9876

操作结果:

delete subscription group [topicTestGroup] from broker [192.168.0.1:10911] in cluster [DefaultCluster] success.delete subscription group [topicTestGroup] from broker [192.168.0.2:10911] in cluster [DefaultCluster] success.delete topic [%RETRY%topicTestGroup] from cluster [DefaultCluster] success.delete topic [%RETRY%topicTestGroup] from NameServer success.delete topic [%DLQ%topicTestGroup] from cluster [DefaultCluster] success.delete topic [%DLQ%topicTestGroup] from NameServer success

将指定订阅组从broker删除,同时将使用该订阅组名称创建的重试topic及死信topic信息统统清除

 

5、updateBrokerConfig

更新broker的属性配置

命令示例:

sh mqadmin updateBrokerConfig -c DefaultCluster -n 192.168.0.1:9876 -k listenPort -v 10911 mqadmin updateBrokerConfig -c DefaultCluster -n 192.168.0.1:9876 -k listenPort -v 10911

操作结果:

update broker config success, 192.168.0.1:10911update broker config success, 192.168.0.2:10911

该命令执行一次,会同时操作于指定集群下的所有Broker。k是broker配置的key值,v是对应的value值,如果想看broker的所有配置,可以执行sh mqbroker -p,注意指定定打印的文件,否则会把启动broker时读取的配置文件覆盖。

注意,该命令一定慎用,另外不要像示例一样修改监听端口,虽然不重启并不起作用,另外也不要修改像brokerName这样的属性,否则会对运行中的集群产生影响的,影响范围包括name server.

其它参数使用--help查看。

 

6、updateTopicPerm

更新Topic权限

命令示例:

sh mqadmin updateTopicPerm -c DefaultCluster -n 192.168.0.1:9876 -p 6 -t TopicTest mqadmin updateTopicPerm -c DefaultCluster -n 192.168.0.1:9876 -p 6 -t TopicTest

操作结果:

update topic perm from 4 to 6 in 192.168.0.1:10911 success.update topic perm from 4 to 6 in 192.168.0.2:10911 success.

该命令执行一次,会对指定集群下的所有Broker的指定Topic的权限更改

部分参数说明:

参数 是否必填 说明
-p 2:R(可读)、4:W(可写)、6:RW(可读可写)

其它参数说明使用--help查看

 

7、topicRoute

查看Topic路由信息

命令示例:

sh mqadmin topicRoute -n 192.168.0.1:9876 -t TopicTest mqadmin topicRoute -n 192.168.0.1:9876 -t TopicTest

操作结果会展示broker上报给name server的topic路由信息, 这个命令就这两个参数

 

8、topicStatus

查看Topic状态信息

命令示例:

sh mqadmin topicStatus -n 192.168.0.1:9876 -t TopicTest

操作结果:

Broker Name #QID #Min Offset #Max Offset #Last Updated

展示的数据有如上几个字段,Min Ofset:队列消息最小偏移量,Max Offset:队列的最大偏移位置,QID是哪条队列,这个命令也就只有这两个参数,参数的说明可以使用--help查看

 


9、topicClusterList

查询Topic所属集群

命令示例:

sh mqadmin topicClusterList -n 192.168.0.1:9876 -t TopicTest mqadmin topicClusterList -n 192.168.0.1:9876 -t TopicTest

操作结果:

 

DefaultCluster

 


10、brokerStatus

Broker运行状态信息

命令示例:

sh mqadmin brokerStatus -n 192.168.0.1:9876 -b 192.168.0.1:10911 mqadmin brokerStatus -n 192.168.0.1:9876 -b 192.168.0.1:10911

注意:

  • 这里面查询出来的数据有些是只在内存保留,并不会持久化的,所以重启broker后数据便会重置。

  • 也可以不用-b指定某个broker,可以使用-c指定某个集群,则查询该集群下所有broker运行状态信息

其它参数说明使用--help查看

 

11、queryMsgById

根据消息ID查询消息

命令示例:

sh mqadmin queryMsgById -n 192.168.0.1:9876 -i C0A8649800002A9F0000000000000000

操作结果:

Topic: TopicTest

Tags: [Tag]

Keys: [90c29e1e99264ca7b27403674ab80f01]

Queue ID: 0

Queue Offset: 0

CommitLog Offset: 0

Reconsume Times: 0

Born Timestamp: 

Store Timestamp: 

Born Host: 

Store Host: 

System Flag: 0

Properties: {TAGS=Tag, KEYS=90c29e1e99264ca7b27403674ab80f01, WAIT=true}

Message Body Path: /tmp/rocketmq/msgbodys/C0A8649800002A9F0000000000000000

-i属性是发送的消息ID,由客户端发送消息之后的发送结果中取得,由RocketMQ生成,业务系统不生成。该值理论是唯一的。

Message Body Path:在这个文件中存放的是字符串格式的消息体,可以直接查看。查询的时候才会生成这个文件 。

 

12、queryMsgByKey

根据消息key查询消息(推荐)

命令示例:

sh mqadmin queryMsgByKey -n 192.168.0.1:9876 -t TopicTest -k a6ba52f404bc4926940c958d0c99fd4d

操作结果:

Message ID #QID #Offset

C0A8649800002A9F000000000000068B 0 3

-k属性是发送的消息key值,可由发送消息时设置传入

需要服务器开启索引才支持。默认是支持的。

key值可以不唯一,所以根据key值查询的消息可能大于1条。因此在使用的时候,应当尽量保持该值的唯一性。

 

13、queryMsgByOffset

根据消息的偏移值来查询消息

命令示例:

sh mqadmin queryMsgByOffset -n 192.168.0.1:9876 -o 0 -t TopicTest -i 0 -b broker-a

操作结果:

queryMsgById的查询结果格式一样

部分参数说明:

参数 是否必填 说明
-o 队列偏移
-i 队列ID
-b Broker 名字