RocketMq | 消费 - 订阅关系(Subscription)

§1 订阅关系 & 订阅关系集

RocketMq 官网中,只有 订阅关系 这个概念,但日常所说的其实是 订阅关系集,此文档中做显示区分

订阅关系

官方定义为:某个消费者组对于某个主题的订阅,可以是订阅全部,也可以是附加过滤条件的部分

消费者组 CG1 订阅了主题 T1,这就是一条订阅关系
消费者组 CG1 订阅了主题 T2 中带有 tag1 的部分,这也是一条订阅关系

rocketMq 中,使用 SubscriptionData 来描述订阅关系,关键属性如下,可见确实是指对单个 topic 的订阅

public class SubscriptionData implements Comparable<SubscriptionData> {
    private String topic;
    private Set<String> tagsSet = new HashSet<String>();
    private String expressionType = ExpressionType.TAG;
}

订阅关系具有独立性

  • 对于同一个消费者组,可以订阅多个 TOPIC,每个订阅都是一条订阅关系,相互独立
  • 对于同一个 TOPIC,可以被多个消费者组订阅,每个订阅都是一条订阅关系,相互独立

订阅关系集

我们通常站在一个消费者组的视角说订阅关系,此时所说的其实是指消费者组下所有订阅关系的集合,即订阅关系集

§2 订阅关系一致

订阅关系一致:一个消费者组下,所有消费者实例要求具有相同的订阅关系集

假设,某消费者组 CG1,订阅了

  • TOPIC0 的所有信息
  • TOPIC1 下带有 tag1 标签的信息
  • TOPIC2 下属性 p1=x 的信息
    我们可以把上面信息简单的记为 CG1: T0, T1@tag1, T2@p1=x

则若 CG1 下所有消费者实例的订阅关系 数据和数量都一致,就认为他们订阅关系一致

常见误区

一个消费者组不能订阅多个 topic

并不是,订阅关系一致只强调消费者组内成员的订阅关系集相互一致,
至于订阅关系集内有多少元素,分别是什么,这些信息单拿出来在订阅关系一致这个问题上都不重要

§3 订阅关系场景一览

图片

§4 排查

从控制台排查

  • 对于云上 rocketmq 可以通过 ons 控制台的诊断
posted @ 2026-01-30 18:24  问仙长何方蓬莱  阅读(0)  评论(0)    收藏  举报