本文主要为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 名字 |