先說結果:會造成數(shù)據(jù)丟失
再說依據(jù):
RocketMQ要求同一個消費者組內的消費者必須訂閱關系一致,如果訂閱關系不一致會出現(xiàn)消息丟失的問題。
官網入口:訂閱關系一致 | RocketMQ
不想看官網的,直接看結論
什么叫訂閱關系一致
1.訂閱的Topic相同,或者訂閱的Topic相同 tag也相同,或者Topic相同,tag的順序也相同。
2.什么叫不一致呢?
就是訂閱的Topic不同,或者Topic相同,但是Tag不同,或者Topic相同tag也相同,但是順序不同
?再說為什么會導致丟失數(shù)據(jù)呢?
為了 提高消費效率,RocketMQ 引入了 ConsumeQueue,ConsumerQueue 中保存消息在 CommitLog 文件中的物理偏移量。ConsumerQueue 中的元素內容如下:
-
前 8 個字節(jié)記錄消息在 CommitLog 中的偏移量。
-
中間 4 個字節(jié)記錄消息消息大小。
-
最后 8 個字節(jié)記錄消息中 tag 的 hashcode。
?關鍵在于最后這個tag的hashcode值,這個 tag 的作用是過濾消息,假如一個 Consumer 訂閱了 Topic1 中的 Tag1,那這個 Consumer ?拉取消息時,首先從 Name Server 獲取訂閱關系,得到當前 Consumer 訂閱的所有 tag 的 hashcode 集合 codeSet。每次從 ConsumerQueue 獲取一條記錄,就要判斷最后 8 個字節(jié) tag hashcode 是否在 codeSet 中,比如 Tag2 不在 codeSet 中,就會被過濾掉。
?如上圖,比如Topic1里面有個TagA,TagB。 consumer1訂閱了TagA,consumer訂閱了TagB,那 Consumer1 從 ConsumeQueue1 和 ConsumeQueue2 消費消息時,就會把 TagB?中的消息過濾掉,這樣即使 Consumer2 訂閱了 TagB,也不能消費到 ConsumeQueue1 和 ConsumeQueue2 里 TagB?中的消息了。
最后一個問題,怎么看是不是存在訂閱關系不一致的 現(xiàn)象?
問題描述
在使用消息隊列RocketMQ版實例時,可能會出現(xiàn)訂閱關系不一致的情況,具體的問題現(xiàn)象如下:
- 消息隊列RocketMQ版控制臺中訂閱關系是否一致顯示為否。
- 消費者(Consumer)實例未收到訂閱的消息。
請參考以下步驟進行檢查文章來源:http://www.zghlxwxcb.cn/news/detail-470169.html
您可在消息消息隊列RocketMQ版控制臺Group 詳情頁面查看指定Group的訂閱關系是否一致。若查詢結果不一致,請參見本文(3 常見訂閱關系不一致問題)排查Consumer實例的消費代碼。文章來源地址http://www.zghlxwxcb.cn/news/detail-470169.html
- 檢查您Consumer實例中與訂閱相關的配置代碼,確保配置同一個Group ID的所有Consumer實例均訂閱相同的Topic及Tag。
- 重啟客戶端應用。
- 登錄消息隊列RocketMQ版控制臺,在左側導航欄中單擊實例列表,選擇您的目標實例,進入實例詳情頁面。
- 在左側導航欄中單擊Group管理,選擇對應的協(xié)議后,單擊消費者狀態(tài),確認訂閱關系是否一致顯示為是。
- 測試并確認消息能夠被預期的Consumer實例所消費。
到了這里,關于Rocketmq面試(一) Rocketmq同一個消費組訂閱不同的Tag,會有什么問題?的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!