Skip to Main Content

Broker读写权限配置项检查

巡检规则

本文中提及的 RocketMQ Copilot 术语是 AutoMQ Copilot for RocketMQ 的简称,均特指安托盟丘(杭州)科技有限公司面向 Apache RocketMQ 设计实现的消息队列智能辅助运维系统。

检测数据源

Broker读写权限配置项的检测数据源是目标集群 BrokerConfig 信息,通过读取目标集群当前生效的配置,判断是否处于异常和风险的状态。

检测周期

  • 每 10 分钟一次。
  • 不可关闭。

异常检测逻辑


[BrokerConfig#brokerPermission](https://github.com/apache/rocketmq/blob/release-4.9.4/common/src/main/java/org/apache/rocketmq/common/BrokerConfig.java#L44C17-L44C33) != 6,则产生异常事件。

事件和风险

RocketMQ Copilot 系统巡检会对检测不通过的规则产生异常事件和风险,异常事件遵循 概述▸

异常事件

  • 异常事件类型:
    • copilot:cluster:BrokerWritePermissionInspectionFailed
    • copilot:cluster:BrokerReadPermissionInspectionFailed
  • 关于事件的详细 schema 定义,异常事件:服务端被禁写▸

异常风险

  • 关联的风险类型:
    • 服务端被禁读
    • 服务端被禁写

风险分析

RocketMQ 读写权限是一个由 3 位二进制数表示的 int 变量。最高位表示读权限,中间位表示写权限,最低位表示是否可以继承权限。该位置 1 分别表示可读/可写/可继承。反之则表示不可读/不可写/不可继承。其中最低位仅对单个 Topic 有意义,对 Broker 是无意义的。

在正常对外提供服务的 Broker Cluster 中,每台 Broker 都应该是可写可读的。在一些特殊的运维场景中,比如整个 Cluster 或某台机器出现了问题需要进行隔离或者下线时可能会存在短暂的 Broker 可读不可写状态,除此之外 Broker 都应该是可写可读的。

Broker 如果被禁读,会导致 Consumer 端大量消息堆积。如果被长期禁写,存量消息都被消费完后会造成 Consumer 端成负载不均,此时 Broker 相当于未对外提供服务,也会造成资源浪费。

运维建议

建议 1:生产环境无特殊运维状态,Broker 读写权限确保调整为 6

生产环境如果无特殊运维状态,Broker 应该确保可读可写的状态。使用如下命令调整:


sh mqadmin updatebrokerconfig -k [brokerPermission](https://github.com/apache/rocketmq/blob/release-4.9.4/common/src/main/java/org/apache/rocketmq/common/BrokerConfig.java#L44C17-L44C33) -v 6