RecoketMQ管理命令之Topic管理
主要介绍针对 Apache RocketMQ 的 Topic 管理命令
前置说明:
- 本文中的所有命令皆是基于当前最新稳定版 Apache RocketMQ 5.1.1 版本;
- 本文中的所有示例命令皆是在基于已正确配置 RocketMQ 的环境变量为前提。
一、创建或修改Topic
使用updateTopic命令可以在指定集群中创建或修改特定的 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 | --writeQueueNums | 否 | 是 | 位于每个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 | 否 | 否 | 打印帮助 |
更多推荐


所有评论(0)