訂閱關系不一致會有什么問題嗎?
阿里二面: 同一個消費組內的消費實例,如果訂閱了相同的 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>
⭐️希望本文章對您有幫助,您的「 轉發、點贊 」是我創作的無限動力。
掃描下方二維碼關注微信公眾號,您會收到更多優質文章推送。

