默认 Topic 队列数配置项检查
巡检规则
本文中提及的 RocketMQ Copilot 术语是 AutoMQ Copilot for RocketMQ 的简称,均特指安托盟丘(杭州)科技有限公司面向 Apache RocketMQ 设计实现的消息队列智能辅助运维系统。
检测数据源
默认 Topic 队列数配置项的检测数据源是目标集群 BrokerConfig 信息,通过读取目标集群当前生效的配置,判断是否处于异常和风险的状态。
检测周期
- 每 10 分钟一次。
- 可关闭。
异常检测逻辑
[BrokerConfig#defaultTopicQueueNums](https://github.com/apache/rocketmq/blob/release-4.9.4/common/src/main/java/org/apache/rocketmq/common/BrokerConfig.java#L45C17-L45C38) 小于 8 ,则产生异常事件。
事件和风险
RocketMQ Copilot 系统巡检会对检测不通过的规则产生异常事件和风险,异常事件遵循 概述▸ 。
异常事件
- 异常事件类型:copilot:cluster:BrokerTopicDefaultQueueNumInspectionFailed
- 关于事件的详细 schema 定义,异常事件:默认主题队列数配置项过大▸ 。
风险分析
默认 Topic 队列数只有在 Topic 自动创建开关启用时才有意义,会直接决定 TBW102 的队列数,同时会通过 min(DefaultMQProducer#defaultTopicQueueNums, BrokerConfig#defaultTopicQueueNums) 计算自动创建的 Topic 的读写队列数。
- 配置项:BrokerConfig#defaultTopicQueueNums。
- 建议配置值:默认为 8,可满足绝大多数业务场景。
- 备注:DefaultMQProducer#defaultTopicQueueNums 默认为 4,因此一般自动创建的 Topic 队列数为 4。
风险
如果和 DefaultMQProducer#defaultTopicQueueNums 同时配置过大会导致 Broker 上产生过多队列,对应的 Consume Queue 会增多,带来更多的随机磁盘 IO,从而影响 Consume Queue 的分发效率,延长 Broker 启动以及异常宕机时的 Recovery 时间。
运维建议
建议 1:生产环境关闭自动创建 Topic
生产环境建议关闭自动创建 Topic,则无需再关注此默认队列数配置。
建议 2:合理分配每个 Topic 的队列数
生产环境创建 Topic 时根据实际的消息吞吐和并发度合理指定队列数,一般单机 8 个队列足够使用,避免设置过多队列。