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>

⭐️希望本文章對您有幫助,您的「 轉發、點贊 是我創作的無限動力。

掃描下方二維碼關注微信公眾號,您會收到更多優質文章推送。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM