ConsumerGroup 自动创建开关配置项检查
巡检规则
本文中提及的 RocketMQ Copilot 术语是 AutoMQ Copilot for RocketMQ 的简称,均特指安托盟丘(杭州)科技有限公司面向 Apache RocketMQ 设计实现的消息队列智能辅助运维系统。
检测数据源
ConsumerGroup 自动创建开关配置项的检测数据源是目标集群 BrokerConfig 信息,通过读取目标集群当前生效的配置,判断是否处于异常和风险的状态。
检测周期
- 每 10 分钟一次。
- 不可关闭。
异常检测逻辑
[BrokerConfig#autoCreateSubscriptionGroup](https://github.com/apache/rocketmq/blob/release-4.9.4/common/src/main/java/org/apache/rocketmq/common/BrokerConfig.java#L53C21-L53C48)= true,则产生异常事件。
事件和风险
RocketMQ Copilot 系统巡检会对检测不通过的规则产生异常事件和风险,异常事件遵循 概述▸ 。
异常事件
- 异常事件类型:copilot:cluster:BrokerConsumerGroupAutoCreateEnableInspectionFailed
- 关于事件的详细 schema 定义,异常事件:订阅组自动创建被启用▸ 。
异常风险
- 关联的风险类型:订阅组自动创建被启用
风险分析
如果启用 Consumer Group 自动创建开关,Broker 会在 Consumer 往 Broker 发送心跳/拉取消息时/回发消费失败消息时检查 Consumer 对应的 Consumer Group 是否已经创建,如果没有就会自动进行创建。
与 Topic 类似,启动该选项可以帮助使用者在测试环境快速上手,对于生产环境更建议禁用。对 Consumer Group 的创建做好提前规划是一个更好的实践。启动该选项时一些可能的隐患包括:
- 导致 Consumer Group 资源管理混乱。
- 每个 Consumer Group 对应的 Consumer 上线时会在 Broker 创建新的 Retry Topic。单个集群创建过多的 Retry Topic 会导致:
- 对应的 Consume Queue 会增多,带来更多的随机磁盘 IO,从而影响 Consume Queue 的分发效率,延长 Broker 启动以及异常宕机时的 Recovery 时间。
- Broker 上管理 Topic 资源的模块压力比较大。后续对 Topic 元数据的变更和向 Broker 注册路由信息都需要序列化 JSON 文件,太多的 Topic 会导致在老年代上直接分配大对象,加快 Broker FGC 的频率,出现明显的写入毛刺,影响服务质量。
运维建议
建议 1:生产环境关闭自动创建 ConsumerGroup
生产环境建议关闭该开关,仅在本地单机环境临时测试时开启。
建议 2:使用Admin API 集成实现自动化 ConsumerGroup 管理
生产环境如需自动管理 ConsumerGroup 资源,可以介入 Admin API 实现 ConsumerGroup 自动化创建删除等管理。