Skip to Main Content

ConsumerGroup 订阅关系一致性检查

巡检规则

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

检测数据源

ConsumerGroup 订阅关系一致性检查的检测数据源是查看 ConsumerGroup 下各 Consumer 的实时订阅关系,通过比对各个 Consumer 的订阅关系是否一致,判断是否存在风险。

检测周期

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

异常检测逻辑


检查相同 ConsumerGroup 下的多个 Consumer 的订阅关系是否一致,如果不一致则产生异常事件。

事件和风险

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

异常事件

异常风险

  • 关联的风险类型:消费者组订阅关系不一致

风险分析

RocketMQ 中,一个 Consumer Group 的订阅关系只有一种。属于这个 Consumer Group 下的所有 Consumer 需要拥有相同的订阅关系。

需要保证同一个 Consumer Group 下的所有 Consumer 拥有相同的订阅关系。以下情况均属于订阅关系不一致:

  • Consumer 之间订阅了不同的 Topic。
  • Consumer 之间订阅相同的 Topic,但是 Tag 或者 SQL 过滤的条件不同。

订阅关系不一致会造成 Consumer 负载均衡结果的混乱。在不同的订阅关系下,每个 Consumer 按照自己的订阅关系进行负载均衡,那么:

  • 如果订阅的 Topic 不一致,会出现部分队列没有消费者负责的情况。
  • 如果 Topic 的过滤条件不一样(包含 Tag 过滤和 SQL 过滤),可能会出现符合过滤条件的消息没有消费者进行消费的情况。

以上都会导致 Consumer 消费时出现消息丢失。

除此之外,如果消费者订阅关系不一致,服务端对同一个 Consumer Group 的订阅关系会出现相互覆盖,当 A Consumer 尝试拉取的队列的 Topic 在服务端订阅关系中不存在时会出现 the consumer's subscription not exist 的报错导致拉取失败。

运维建议

建议 1:生产环境基于统一配置管理订阅相关的配置信息,避免不同节点和版本不一致

生产环境建议安装统一的配置系统下发关于订阅关系的配置信息,避免因不同节点使用了不同版本、不同的本地配置导致订阅关系不一致。