RocketMQ订阅关系不一致

订阅关系不一致会有什么问题吗?

阿里二面: 同一个消费组内的消费实例,如果订阅了相同的 topic,但是订阅的 tag 不一样,会有什么问题吗?

测试配置消费实例1

生产配置消费实例2

阿里云--消息队列 RocketMQ 版

会导致订阅关系不一致,导致消息丢失

 RocketMQ 要求同一个消费者Group ID下所有Consumer实例所订阅的Topic、Tag必须完全一致。订阅的同一个Topic中的Tag必须一致,包括Tag的数量和Tag的顺序。

阿里云官方文档介绍——订阅关系一致

为什么订阅关系不一致会导致消息丢失呢?

为了提高消费效率,RocketMQ 引入了 ConsumeQueue,ConsumerQueue 中保存消息在 CommitLog 文件中的物理偏移量。ConsumerQueue 中的元素内容如下:

(1)前8个字节记录消息在 CommitLog 中的偏移量。

(2)中间4个字节记录消息消息大小。

(3)最后8个字节记录消息中tag的 hashcode。

这个tag的作用是过滤消息,假如一个 Consumer订阅了Topic1中的Tag1,那这个 Consumer拉取消息时,首先从Name Server获取订阅关系,得到当前Consumer订阅的所有tag的hashcode集合codeSet。每次从ConsumerQueue获取一条记录,就要判断最后8个字节 tag hashcode 是否在 codeSet 中,比如 Tag2 不在 codeSet 中,就会被过滤掉。

 <END>

⭐️希望本文章对您有帮助,您的「 转发、点赞 是我创作的无限动力。

扫描下方二维码关注微信公众号,您会收到更多优质文章推送。

posted @ 2021-12-21 21:47  JustJavaIt  阅读(1311)  评论(0编辑  收藏  举报