RocketMQ 学习之三 —— mqadmin

本文详细介绍RocketMQ提供的控制台及一系列控制台命令,涵盖主题、集群、Broker管理,包括创建、删除Topic,更新订阅组,查询消息等多种操作,帮助管理员有效管理RocketMQ系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1. 控制台使用

RocketMQ 提供有控制台及一系列控制台命令,用于管理员对主题,集群,broker 等信息的管理;

登录控制台

首先进入RocketMQ 工程,进入/RocketMQ/bin

在该目录下有个mqadmin 脚本

查看帮助

在mqadmin 下可以查看有哪些命令

sh mqadmin

查看具体命令的使用

sh mqadmin help 命令名称

例如,查看updateTopic 的使用

sh mqadmin help updateTopic

 

1.2. 详细命令

1.2.1. 创建Topic

指令 

updateTopic 

类路径 

com.alibaba.rocketmq.tools.command.topic.UpdateTopicSubCommand

参数

是否必填

说明

-b

如果-c为空,则必填

broker 地址,表示topic 建在该broker

-c

如果-b为空,则必填

cluster 名称,表示topic 建在该集群(集群可通过clusterList 查询)

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

-p

否 

指定新topic 的权限限制( W|R|WR )

-r 

可读队列数(默认为8)

-w

可写队列数(默认为8)

-t

opic 名称(名称只能使用字符 ^[a-zA-Z0-9_-]+$ )

 

1.2.2. 删除Topic

指令 

deleteTopic 

类路径 

com.alibaba.rocketmq.tools.command.topic.DeleteTopicSubCommand

参数 

是否必填

 说明

-c

cluster 名称,表示删除某集群下的某个topic (集群可通过clusterList 查询)

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;…

-t

topic 名称(名称只能使用字符 ^[a-zA-Z0-9_-]+$ )

 

1.2.3. 创建(修订)订阅组

指令 

updateSubGroup 

类路径 

com.alibaba.rocketmq.tools.command.consumer.UpdateSubGroupSubCommand

参数

是否必填

说明

-b

如果 –c 为空,则必填

broker 地址,表示订阅组建在该broker

-c

如果 –b 为空,则必填

cluster名称,表示topic 建在该集群(集群可通过clusterList查询)

-d

否 

是否容许广播方式消费

-g

是 

订阅组名

-i

从哪个broker 开始消费

-m

是否容许从队列的最小位置开始消费,默认会设置为false

-q

消费失败的消息放到一个重试队列,每个订阅组配置几个重试队列

-r 

否 

重试消费最大次数,超过则投递到死信队列,不再投递,并报警

-s

消费功能是否开启

-w 

发现消息堆积后,将Consumer 的消费请求重定向到另外一台Slave 机器

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.4. 删除订阅组配置

指令 

deleteSubGroup 

类路径 

com.alibaba.rocketmq.tools.command.consumer.DeleteSubscriptionGroupCommand

参数

是否必填

说明

-b 

如果–c 为空,则必填

broker 地址,表示订阅组建在该broker

-c 

如果–b 为空,则必填

cluster 名称,表示topic建在该集群(集群可通过clusterList查询)

-g

订阅组名

-h

打印帮助

-n 

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.5. 更新Broker 配置文件

指令 

updateBrokerConfig

类路径

com.alibaba.rocketmq.tools.command.broker.UpdateBrokerConfigSubCommand

参数

是否必填

说明

-b 

如果–c为空,则必填

broker 地址,表示订阅组建在该broker

-c 

如果–b 为空,则必填

cluster名称,表示topic 建在该集群(集群可通过clusterList查询)

-k 

 key 值

-v

value 值

-h

打印帮助

-n 

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.6. 查看Topic 列表信息

指令 

topicList 

类路径 

com.alibaba.rocketmq.tools.command.broker.UpdateBrokerConfigSubCommand

参数

是否必填

说明

-h

打印帮助

-n 

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.7. 查看Topic 路由信息

指令 

topicRoute 

类路径 

com.alibaba.rocketmq.tools.command.topic.TopicRouteSubCommand

参数

是否必填

说明

-t

topic 名称

-h

打印帮助

-n 

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.8. 查看Topic 统计信息

指令 

topicStats 

类路径

com.alibaba.rocketmq.tools.command.topic.TopicStatsSubCommand

参数

是否必填

说明

-t

topic 名称

-h

打印帮助

-n 

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.9. 查看Broker 统计信息

指令 

brokerStats 

类路径

com.alibaba.rocketmq.tools.command.broker.BrokerStatsSubCommanD

参数

是否必填

说明

-b

 broker 地址

-h

打印帮助

-n 

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.10. 根据消息ID 查询消息

指令 

queryMsgById 

类路径

com.alibaba.rocketmq.tools.command.message.QueryMsgByIdSubCommand

参数

是否必填

说明

-i

 消息id

-h

打印帮助

-n 

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.11. 根据消息Key 查询消息

指令 

queryMsgByKey 

类路径

com.alibaba.rocketmq.tools.command.message.QueryMsgByKeySubCommand

参数

是否必填

说明

-f

被查询消息的截止时间

-k

msgKey

-t

topic 名称

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.12. 根据Offset 查询消息

指令 

queryMsgByOffset

类路径

com.alibaba.rocketmq.tools.command.message.QueryMsgByOffsetSubCommand

参数

是否必填

说明

-b 

Broker 名称,表示订阅组建在该broker(这里需要注意填写的是broker 的名称,不是broker 的地址,broker名称可以在clusterList 查到

-i

query 队列id

-o

offset 值

-t

topic 名称

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.13. 查询Producer 的网络连接

该命令只打印当前与cluster 连接的producer 网络连接信息

指令 

producerConnection

类路径

com.alibaba.rocketmq.tools.command.connection.ProducerConnectionSubCommand

参数

是否必填

说明

-g

生产者所属组名

-t

topic 名称

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.14. 查询Consumer 的网络连接

该命令只打印当前与cluster 连接的consumer 网络连接信息

指令 

consumerConnection

类路径

com.alibaba.rocketmq.tools.command.connection.ConsumerConnectionSubCommand

参数

是否必填

说明

-g

消费者所属组名

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.15. 查看订阅组消费状态

指令 

consumerProgress

类路径

com.alibaba.rocketmq.tools.command.consumer.ConsumerProgressSubCommand

参数

是否必填

说明

-g

消费者所属组名

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.16. 查看集群消息

指令 

clusterList 

类路径

com.alibaba.rocketmq.tools.command.cluster.ClusterListSubCommand

参数

是否必填

说明

-m

打印更多信息

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.17. 添加(更新)KV 配置信息

指令 

updateKvConfig 

类路径

com.alibaba.rocketmq.tools.command.namesrv.UpdateKvConfigCommand

参数

是否必填

说明

-k

key 值

-v

value 值

-s

Namespace 值

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.18. 删除KV 配置信息

指令 

deleteKvConfig 

类路径

com.alibaba.rocketmq.tools.command.namesrv.DeleteKvConfigCommand

参数

是否必填

说明

-k

key 值

-s

Namespace 值

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.19. 添加(更新)Project group 配置信息

指令 updateProjectGroup 

类路径 com.alibaba.rocketmq.tools.command.namesrv.UpdateProjectGroupCommand

参数

是否必填

说明

-p

project group 名

-i

服务器ip

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.20. 删除Project group 配置信息

指令 

deleteProjectGroup

类路径

com.alibaba.rocketmq.tools.command.namesrv.DeleteProjectGroupCommand

参数

是否必填

说明

-p

project group 名

-i

服务器ip

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.21. 取得Project group 配置信息

指令 

getProjectGroup

类路径

com.alibaba.rocketmq.tools.command.namesrv.GetProjectGroupCommand

参数

是否必填

说明

-p

project group 名

-i

服务器ip

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.22. 设置消费进度

根据时间来设置消费进度,设置之前要关闭这个订阅组的所有consumer,设置完再启动,方可生效

指令 

resetOffsetByTime

类路径

com.alibaba.rocketmq.tools.command.offset.ResetOffsetByTimeSubCommand

参数

是否必填

说明

-f

通过时间戳强制回滚(true|false),默认为true

-s

时间戳

-g

消费者所属组名

-t

topic 名称

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.23. 清除特定Broker权限

指令 

wipeWritePerm 

类路径

com.alibaba.rocketmq.tools.command.namesrv.WipeWritePermSubCommand

参数

是否必填

说明

-b

broker 地址

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

 

1.2.24. 获取Consumer消费进度

该命令只打印当前与cluster 连接的consumer 的消费进度

指令 

getConsumerStatus

类路径 

com.alibaba.rocketmq.tools.command.offset.GetConsumerStatusCommand

参数

是否必填

说明

-g

消费者所属组名

-t

查询主题

-i

Consumer 客户端ip

-h

打印帮助

-n

nameserve 服务地址列表,格式ip:port;ip:port;...

### RocketMQMQAdminExt 的功能及使用方法 #### 1. **MQAdminExt 基本概念** `MQAdminExt` 是 Apache RocketMQ 提供的一个管理工具类,主要用于管理和监控 RocketMQ 集群的状态。它提供了丰富的接口来操作 Broker、Topic 和消息队列等功能[^3]。 通过 `MQAdminExt`,可以实现以下核心功能: - 创建和删除 Topic。 - 查询集群状态、Broker 信息以及消费者组订阅关系。 - 调整权限设置(如禁用写入)。 - 查看消息轨迹并追踪消息发送与消费情况。 --- #### 2. **主要功能详解** ##### (1) **创建和删除 Topic** 可以通过 `createTopicInCluster` 方法动态创建一个新的 Topic,并指定分区数量和其他参数。以下是代码示例: ```java // 初始化 Admin 实例 DefaultMQAdminExt admin = new DefaultMQAdminExt(); admin.setNamesrvAddr("localhost:9876"); admin.start(); // 定义 Topic 属性 String topicName = "TestTopic"; int queueNums = 4; int topicSysFlag = 0; // 默认标志位 long perm = Permission.READ | Permission.WRITE; // 权限控制 String topicFilterType = "SINGLE_TAG"; // 过滤类型 // 执行创建 Topic 操作 admin.createTopic(topicName, queueNums, topicSysFlag, perm, topicFilterType); // 关闭连接 admin.shutdown(); ``` 此部分逻辑允许管理员灵活调整系统的主题结构。 --- ##### (2) **查询 Cluster/Broker/Consumer 状态** `MQAdminExt` 支持多种查询功能,用于获取当前 RocketMQ 集群的整体运行状况。例如,查看所有 Broker 列表或者某个特定 Consumer 组的订阅详情。 下面是一个简单的例子展示如何打印整个集群中的 Brokers: ```java Set<String> brokerAddrs = admin.fetchAllBrokerAddr(); for (String addr : brokerAddrs) { System.out.println("Broker Address: " + addr); } ``` 对于消费者的订阅列表,则可通过如下方式完成检索: ```java List<SubscriptionData> subscriptions = admin.examineSubGroupOffset("test-group", null); subscriptions.forEach(sub -> System.out.println(sub.getTopic() + ": " + sub.getExpression())); ``` 这些 API 对于日常运维非常有用,能够帮助快速定位潜在问题所在。 --- ##### (3) **修改 Broker 写权限** 当需要临时停止某些 Broker 接收新数据时,可利用 `wipeWritePermOfBroker` 函数执行该动作。注意这会直接影响到生产者能否成功投递至目标 Queue 上[^2]。 实际应用中可能涉及两种场景——基于命令行脚本触发或是程序内部调用上述提到的方法实现自动化处理流程。 --- #### 3. **注意事项** 尽管 `MQAdminExt` 功能强大,但在实际部署过程中仍需遵循一些最佳实践原则以保障稳定性: - 确保 NameServer 地址配置无误以便正常通信; - 小心对待敏感操作比如更改访问级别以免造成不可逆后果; - 如果是在分布式环境下运作的话记得考虑网络延迟因素影响性能表现[^4]。 --- ### 示例总结代码片段 这里提供一段综合性的 Java 测试案例作为参考模板: ```java public class MqAdminExample { public static void main(String[] args) throws Exception { DefaultMQAdminExt mqAdmin = new DefaultMQAdminExt(); try { mqAdmin.setNamesrvAddr("localhost:9876"); // 设置 Nameserver 地址 mqAdmin.start(); // 启动客户端 String clusterName = "DefaultCluster"; // 获取集群下的所有 Broker 名称 Set<String> brokers = mqAdmin.viewBrokerStatsInfo(clusterName).keySet(); brokers.forEach(brokerName -> System.out.println("Broker Name:" + brokerName)); // 删除测试 Topic mqAdmin.deleteTopicInCluster(clusterName, "TestTopic"); } finally { mqAdmin.shutdown(); // 结束资源释放 } } } ``` 以上展示了基本的操作模式及其灵活性特点。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值