跳到主要内容
版本:1.0.0(开发版)

使用 Admin CLI 管理集群

使用 rocketmq-admin-cli 观察集群,并执行明确选定的元数据操作。它是本仓库的 Rust CLI,通过 topicconsumerha 等领域子命令组织功能。命令已注册代表客户端具备入口,接收请求的服务仍需支持该操作并授予权限。

连接目标集群

从仓库根目录构建匹配版本的 CLI:

cargo build -p rocketmq-admin-cli

Unix 下使用 target/debug/rocketmq-admin-cli,Windows 下使用 target/debug/rocketmq-admin-cli.exe。下文使用 cargo run -p rocketmq-admin-cli --,因此不必修改 PATH。原生构建依赖见源码安装

在 Admin 终端设置 NameServer 环境:

$env:NAMESRV_ADDR = "127.0.0.1:9876"
export NAMESRV_ADDR='127.0.0.1:9876'

多个 NameServer 使用带引号的分号分隔列表。变量名是 NAMESRV_ADDR,不是 ROCKETMQ_NAMESRV_ADDR-n 只由部分子命令提供,不是根命令的全局选项。特别是 cluster clusterListconsumer updateSubGroup,发现地址来自环境变量。

服务启用认证时,通过运维人员受保护的环境成对提供 ROCKETMQ_ACL_ACCESS_KEYROCKETMQ_ACL_SECRET_KEY,以及可选的 ROCKETMQ_ACL_SECURITY_TOKEN,详见部署安全。变更状态前确认端点与身份。

诊断客户端前先读取路由

以下命令观察教程集群

cargo run -p rocketmq-admin-cli -- cluster clusterList -c DocsCluster
cargo run -p rocketmq-admin-cli -- topic topicList -n 127.0.0.1:9876
cargo run -p rocketmq-admin-cli -- topic topicRoute -t DocsFirstMessage -n 127.0.0.1:9876
cargo run -p rocketmq-admin-cli -- topic topicStatus -t DocsFirstMessage -n 127.0.0.1:9876
cargo run -p rocketmq-admin-cli -- broker brokerStatus -b 127.0.0.1:10911

clusterList 展示注册信息;topicRoute 展示主题返回的 Broker 地址与队列;topicStatus 展示队列偏移量边界;brokerStatus 查询指定 Broker 的运行数据。路由可见不能证明持久化、复制或应用消费已成功。

有多个 NameServer 时,分别指定单个地址查询,以定位观察差异。从应用网络测试路由返回的地址。Broker 主机上的 Admin 可能成功,但远端客户端仍无法访问对外公布的回环地址。

观察消费者与进度

cargo run -p rocketmq-admin-cli -- connection consumerConnection -g docs_first_message_consumer -b 127.0.0.1:10911
cargo run -p rocketmq-admin-cli -- consumer consumerProgress -g docs_first_message_consumer -t DocsFirstMessage -n 127.0.0.1:9876

连接查询面向一个 Broker,展示该组当前的客户端、订阅观察结果,其领域是 connection,不是 consumer。进度查询把消费者组已提交的队列位置与 Broker 队列边界关联起来。调查是否推进时,应在已知时间间隔内查询两次,并保持主题、组、Broker 名称和队列 ID 对应一致。

观察结果解释与下一步
没有注册客户端检查启动生命周期、组名、心跳/连接、认证,以及所用客户端模式是否产生该观察信息
有连接但进度不动检查订阅过滤、队列分配、处理结果、重试与偏移量/回执完成
进度落后于最小保留偏移量数据可能已超出本地保留范围;检查消费者的偏移量修正和业务核对
显示积压为零该时刻观察到的提交位置已追平,不能证明独立业务数据库已经提交
重启后重复处理检查业务完成是否早于偏移量/ACK 持久化,并实施幂等投递处理

LitePull 本地 commit_all 与随后 Broker 可见的持久化不是同一步。POP 使用回执完成与不可见期,不能把传统组偏移量查询当作所有已取出消息均被 ACK 的证明。

检查复制与 Controller 权限

HA 教程 中,选择当前 Controller Leader 的 remoting 地址:

cargo run -p rocketmq-admin-cli -- controller getControllerMetaData -a 127.0.0.1:19878
cargo run -p rocketmq-admin-cli -- ha getSyncStateSet -a 127.0.0.1:19878 -c DocsCluster -b docs-ha
cargo run -p rocketmq-admin-cli -- ha haStatus -b 127.0.0.1:10911

这些地址是示例,不代表第一个节点始终为 Leader,也不代表 10911 始终对应可写 Broker。计划重启前,比较实际 Leader/角色、权限 epoch、同步成员关系与复制进度。副本已注册不等于它能满足当前写入要求。Controller 保存权限元数据,不保存消息正文备份。

创建隔离的教程资源

以下命令会创建或更新元数据,仅针对隔离的教程资源名和目标集群执行:

cargo run -p rocketmq-admin-cli -- topic updateTopic -t DocsFirstMessage -c DocsCluster -r 4 -w 4 -n 127.0.0.1:9876
cargo run -p rocketmq-admin-cli -- consumer updateSubGroup -g docs_first_message_consumer -c DocsCluster

复用已有主题、组可能修改其配置。操作后查询路由并观察组行为。面向整个集群的操作可能影响多个 Broker,不是跨节点事务;应逐目标检查失败与最终状态。

改变消费或移除状态的操作

命令类别执行前需要明确的影响
offset resetOffsetByTime修改组的队列位置;向前回退会重放保留数据,向后跳转会跳过处理
offset cloneGroupOffset按另一个组替换目标进度;两组订阅与业务完成情况可能不同
offset skipAccumulatedMessage跳过积压,不会补做对应业务工作
consumer deleteSubGroup / topic deleteTopic移除应用依赖的元数据;数据清理与路由收敛是其他效果
Broker 配置与清理命令按具体操作影响请求接纳、保留策略或持久化状态

重置前停止或协调相关消费者,记录各队列原位置,确认仍保留的数据区间,并决定应用如何处理重放或跳过。可先查询当前帮助,不变更状态:

cargo run -p rocketmq-admin-cli -- offset resetOffsetByTime --help

时间戳参数为 -s / --timestamp,接受 epoch 毫秒、帮助中规定的时间格式或 nownow 明确表示跳过当前积压。在线通知与旧版离线回退取决于服务端、客户端路径,应验证实际位置和应用行为;CLI 成功不能替代该观察。

错误与离线检查

记录命令领域、非秘密参数、端点、时间、退出码与稳定错误码。--verbose 增加受控诊断字段,不应因此打印完整凭据或消息正文。服务端不支持操作、认证拒绝、参数无效和 Broker 不可达,需要不同处理。

rocketmq-store-inspect 是单独的离线工具包,二进制名称为 rocketmq-cli-rust,不连接集群。按备份恢复升级回退的说明,用它检查已停止或一致性复制的存储状态,不把它当作在线 Admin 替代品。

源码索引

CLI 命令注册凭据与错误处理Admin Core离线检查工具