前置说明:
- 本文中的所有命令皆是基于当前最新稳定版 Apache RocketMQ 5.1.1 版本;
- 本文中的所有示例命令皆是在基于已正确配置 RocketMQ 的环境变量为前提。
一、创建或修改Topic
使用updateTopic
命令可以在指定集群中创建或修改特定的 Topic。
注意:
- 具体此次操作是创建还是修改,取决目标位置的 topic 是否已存在,若不存在,则是创建,反之则为修改;
- 在对已存在的 topic 进行修改操作时,也需指定所有的配置项,否则一律使用默认值将其重置;
- 可以简单的将此命令的原理理解成:先尝试删除原 topic,再使用指定的配置项进行创建之。
以 NameServer 地址为192.168.1.1:9876
、集群名为DefaultCluster
为例,其创建或修改的具体示例命令为:
-
在集群下的所有broker中创建或修改
mqadmin updateTopic -n 192.168.1.1:9876 -c DefaultCluster -t TOPIC_NAME
即表示在 DefualtCluster 的集群中,创建或重置一个名为 TOPIC_NAME 的 topic。
注意:执行完成后,最好再使用 topicRoute 命令确认一下执行结果。
-
在指定的broker中创建或修改
mqadmin updateTopic -n 192.168.1.1:9876 -b 192.168.1.3:10911 -t TOPIC_NAME -w 4 -r 4
上述命令表示在通信地址为 192.168.1.3:10911 的 broker 组中,创建或重置一个名为 TOPIC_NAME 的 topic,并将该 broker 组的读写队列数皆设为 4 个。
注意:执行完成后,最好再使用 topicRoute 命令确认一下执行结果。
更多组合方式,请参考该命令的详细选项表(下表所示)自行组合:
选项简写 | 选项全称 | 必需 | 带参 | 说明 |
---|---|---|---|---|
-n | --namesrvAddr | 是 | 是 | NameServer服务地址列表 |
-t | --topic | 是 | 是 | 目标Topic名称 |
-c | --clusterName | 否 与 -b 至少需要一个 | 是 | 作用于集群的集群名称 |
-b | --brokerAddr | 否 与 -c 至少需要一个 | 是 | 作用于的broker地址(不支持多个地址) 例如:192.168.0.3:10911 |
-w | --writeQueueNames | 否 | 是 | 位于每个broker组的写队列数量 默认值为:8 |
-r | --readQueueNums | 否 | 是 | 位于每个broker组的读队列数量 默认值为:8 |
-p | --permission | 否 | 是 | 队列的权限级别,默认值为:6 [2:只写 4:只读 6:读写] |
-o | --order | 否 | 是 | 是否为顺序topic,默认值为:false [true:是 false:否] |
-u | --unit | 否 | 是 | 是否为 |
-s | --hasUnitSub | 否 | 是 | |
-a | --attributes | 否 | 是 | |
-h | --help | 否 | 否 | 打印帮助 |
二、查看Topic列表信息
使用topicList
命令可以从指定的 NameServer 上拉取 Topic 清单列表。
以 NameServer 地址为192.168.1.1:9876
为例,查看的具体命令为:
mqadmin topicList -n 192.168.1.1:9876 -c
打印的结果示例如下:
#Cluster Name #Topic #Consumer Group
DefaultCluster rmq_sys_SYNC_BROKER_MEMBER_broker-b
DefaultCluster rmq_sys_SYNC_BROKER_MEMBER_broker-a
DefaultCluster TOPIC_NAME
该命令的详细选项如下表所示:
选项简写 | 选项全称 | 必需 | 带参 | 说明 |
---|---|---|---|---|
-n | --namesrvAddr | 是 | 是 | NameServer服务地址列表 例如:‘192.168.0.1:9876;192.168.0.2:9876’ |
-c | --clusterModel | 否 | 否 | 以集群模式显示Topic列表 |
-h | --help | 否 | 否 | 打印帮助 |
三、查看Topic所在集群列表
使用topicClusterList
命令可以从指定的 NameServer 上获取指定 Topic 所在集群的列表清单。
以 NameServer 地址为192.168.1.1:9876
为例,其查看的具体命令为:
mqadmin topicClusterList -n 192.168.1.1:9876 -t TOPIC_NAME
打印的结果示例如下:
DefaultCluster
即表示名为 TOPIC_NAME 的 topic 仅位于名为 DefaultCluster 的集群中。
该命令的详细选项如下表所示:
选项简写 | 选项全称 | 必需 | 带参 | 说明 |
---|---|---|---|---|
-n | --namesrvAddr | 是 | 是 | NameServer服务地址列表 例如:‘192.168.0.1:9876;192.168.0.2:9876’ |
-t | --topic | 是 | 是 | 目标Topic名称 |
-h | --help | 否 | 否 | 打印帮助 |
四、查看Topic路由信息
使用topicRoute
命令可以从指定的 NameServer 上获取指定 Topic 的路由信息。
以 NameServer 地址为192.168.1.1:9876
为例,其查看的具体命令为:
mqadmin topicRoute -n 192.168.1.1:9876 -t TOPIC_NAME -l
打印的示例结果如下:
#ClusterName #BrokerName #BrokerAddrs #ReadQueue #WriteQueue #Perm
DefaultCluster broker-a {0=192.168.1.2:10911, 1=192.168.1.3:10911} 4 4 6
DefaultCluster broker-b {0=192.168.1.4:10911, 1=192.168.1.5:10911} 4 4 6
------------------------------------------------------------------------------------------------------------
Total: 2 8 8
该命令的详细选项如下表所示:
选项简写 | 选项全称 | 必需 | 带参 | 说明 |
---|---|---|---|---|
-n | --namesrvAddr | 是 | 是 | NameServer服务地址列表 例如:‘192.168.0.1:9876;192.168.0.2:9876’ |
-t | --topic | 是 | 是 | 目标Topic名称 |
-l | –list | 否 | 否 | 使用列表格式打印路由信息(否则返回JSON数据) |
-h | --help | 否 | 否 | 打印帮助 |
五、查看Topic的队列位移
使用topicStatus
命令可以从指定的 NameServer 上获取指定 Topic 的队列位移信息。
以 NameServer 地址为192.168.1.1:9876
为例,其查看的详细命令为:
mqadmin topicStatus -n 192.168.1.1:9876 -t TOPIC_NAME
打印的结果示例如下:
#Broker Name #QID #Min Offset #Max Offset #Last Updated
broker-a 0 0 188871 2023-05-25 10:31:52,716
broker-a 1 0 178882 2023-05-25 10:31:52,716
broker-a 2 0 178880 2023-05-25 10:31:52,718
broker-a 3 0 178879 2023-05-25 10:31:52,713
broker-b 0 0 51285 2023-05-25 10:31:52,714
broker-b 1 0 51284 2023-05-25 10:31:52,715
broker-b 2 0 51284 2023-05-25 10:31:52,716
broker-b 3 0 51283 2023-05-25 10:31:52,716
该命令的详细选项如下表所示:
选项简写 | 选项全称 | 必需 | 带参 | 说明 |
---|---|---|---|---|
-n | --namesrvAddr | 是 | 是 | NameServer服务地址列表 例如:‘192.168.0.1:9876;192.168.0.2:9876’ |
-t | --topic | 是 | 是 | 目标Topic名称 |
-h | --help | 否 | 否 | 打印帮助 |
六、计算消费者对Topic的负载结果
使用allocateMQ
命令可以以平均负载算法计算消费者列表负载消息队列的负载结果。
以 NameServer 地址为192.168.1.1:9876
为例,其计算的具体命令为:
mqadmin allocateMQ -n 192.168.1.1:9876 -t TOPIC_NAME -i 192.168.1.15
该命令的详细选项如下表所示:
选项简写 | 选项全称 | 必需 | 带参 | 说明 |
---|---|---|---|---|
-n | --namesrvAddr | 是 | 是 | NameServer服务地址列表 例如:‘192.168.0.1:9876;192.168.0.2:9876’ |
-t | --topic | 是 | 是 | 目标Topic名称 |
-i | --ipList | 是 | 是 | IP地址列表(用逗号分隔) 计算这些IP去负载topic的消息队列 |
-h | --help | 否 | 否 | 打印帮助 |
七、统计Topic指标
使用statsAll
命令可以对指定的 NameServer 上的 topic 进行指标统计,以打印 topic 的订阅关系、TPS、积压量和24小时内的读写总量信息。
以 NameServer 地址为192.168.1.1:9876
为例,其指标统计的具体命令为:
mqadmin statsAll -n 192.168.1.1:9876 -a
打印的示例结果如下:
#Topic #Consumer Group #Accumuation #InTPS #OutTPS #InMsg24Hour #OutMsg24Hour
TOPIC_NAME group_test 0.00 0.00 2000 2331
下表对上述打印的示例结果中的各列名进行说明:
序号 | 列名 | 描述 |
---|---|---|
1 | Topic | Topic名称 |
2 | Consumer Group | 订阅该topic的消费者组名称 |
3 | Accumuation | 积压的消息量 |
4 | InTPS | 生产者TPS |
5 | OutTPS | 消费者TPS |
6 | InMsg24Hour | 24小时内生产的消息总量 |
7 | OutMsg24Hour | 24小时内消费的消息总量 |
该命令的详细选项如下表所示:
选项简写 | 选项全称 | 必需 | 带参 | 说明 |
---|---|---|---|---|
-n | --namesrvAddr | 是 | 是 | NameServer服务地址列表 例如:‘192.168.0.1:9876;192.168.0.2:9876’ |
-t | --topic | 否 | 是 | 仅打印指定的Topic(否则显示所有Topic) |
-a | --activeTopic | 否 | 否 | 仅打印活动的Topic |
-h | --help | 否 | 否 | 打印帮助 |
八、变更Topic读写权限
使用updateTopicPerm
命令可以从变更指定 topic 的读写权限。
以 NameServer 地址为192.168.1.1:9876
、集群名为DefaultCluster
为例,将名为TOPIC_NAME
的 topic 的变更为只能进行消费的 topic,其变更的具体命令是:
mqadmin updateTopicPerm -n 192.168.1.1:9876 -c DefaultCluster -t TOPIC_NAME -p 4
执行后的打印结果示例如下:
update topic perm from 6 to 2 in 192.168.1.3:10911 success.
update topic perm from 6 to 2 in 192.168.1.4:10911 success.
update topic perm from 6 to 2 in 192.168.1.5:10911 success.
update topic perm from 6 to 2 in 192.168.1.6:10911 success.
九、删除Topic
使用deleteTopic
命令可以从特定的集群中删除指定 Topic 的信息。
以 NameServer 地址为192.168.1.1:9876
、集群名为DefaultCluster
为例,其删除的具体命令是:
mqadmin deleteTopic -n 192.168.1.1:9876 -c DefaultCluster -t TOPIC_NAME
当打印的结果如下示例时,则表示删除成功:
delete topic [TOPIC_NAME] from cluster [DefaultCluster] success.
delete topic [TOPIC_NAME] from NameServer success.
该命令的详细选项如下表所示:
选项简写 | 选项全称 | 必需 | 带参 | 说明 |
---|---|---|---|---|
-n | --namesrvAddr | 是 | 是 | NameServer服务地址列表 例如:‘192.168.0.1:9876;192.168.0.2:9876’ |
-c | --clusterName | 是 | 是 | 从哪个集群中删除 |
-t | --topic | 是 | 是 | 目标Topic名称 |
-h | --help | 否 | 否 | 打印帮助 |