日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

消息长度_填坑笔记:RocketMQ消息订阅失败问题?

發布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 消息长度_填坑笔记:RocketMQ消息订阅失败问题? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前語:不要為了讀文章而讀文章,一定要帶著問題來讀文章,勤思考。

作者:kinnylee ??來源:http://1t.click/g26

# 背景介紹

項目組使用阿里RocketMQ,對同一個消費組設置不同的tag訂閱關系,出現消息丟失的問題,本文從rocketmq源碼研究消息發布與訂閱原理,并分析導致該問題的原因。

# 官方說明

  • 告訴使用者:同一個消費組,必須保持訂閱關系一致

  • 為什么?它沒有說!只能從源碼找答案

# 問題復現

  • 啟動消費者1,消費組為group1,訂閱topicA的消息,tag設置為tag1 || tag2

  • 啟動消費者2,消費組也為group1,也訂閱topicA的消息,但是tag設置為tag3

  • 啟動生產者,生產者發送含有tag1,tag2,tag3的消息各10條

  • 消費者1沒有收到任何消息,消費者2收到部分消息

# 結論

  • 同一個消費組中,設置不同tag時,后啟動的消費者會覆蓋先啟動的消費者設置的tag

  • tag決定了消息過濾的條件,經過服務端和客戶端兩層過濾,最后只有后啟動的消費者才能收到部分消息

# 原理說明

1、消息如何保存

CommitLog

  • 保存所有topic的原始消息

  • CommitLog分為多個文件,每個文件默認最大為1G

  • 每條記錄包括:消息長度和消息文本(消息體,屬性,uid等等)

  • 因每條消息長度不一致,每個commitLog的記錄長度也不一致

ConsumerQueue

  • 保存某個Topic下某個Queue的索引信息

  • 每條記錄包括:消息在commitLog中的offset,消息大小,消息tag的哈希值

  • 每條記錄長度固定為20byte

  • producer發送消息后,先保存到commitLog,再異步建立該條消息對應的topic + queue對應的ConsumerQueue索引

  • 第三部分的Hash(tag)是服務端過濾消息的重要依據

2、consumer如何訂閱消息?

注冊訂閱信息

  • consumer訂閱時,會將訂閱信息注冊到到服務端

  • 保存訂閱信息的是Map類,key為topic,value主要是tag

  • subVersion取當前時間。

這里的key是topic,subVersion版本號,這兩點很關鍵!后面有用到!

拉取消息并過濾

  • 拉取消息時,首先從服務端獲取訂閱關系,得到tag的hash集合codeSet

  • 然后從ConsumerQueue獲取一條記錄,判斷記錄的hashCode是否在codeSet中,以達到消息過濾的目的,決定是否將該消息發送給consumer

  • 總之一句話:tag決定了消息是否發到客戶端

3、消息過濾

服務端過濾

  • 過濾:tag的hash值過濾

  • 優點:

    • 減少不必要消息占用流量

  • 缺點:

    • Hash存在沖突,過濾不完全準確

客戶端過濾

  • 服務端過濾存在不準確性,客戶端再次精確過濾

  • 客戶度過濾:tag的字符串值做對比。不相等的不返回給消費者

原因總結

  • 同一個consumer group的訂閱關系,保存在RebalanceImpl類的Map中。key為topic

  • 不同的消費者啟動后,依次注冊訂閱關系,因為tag不一樣,導致Map中同一topic的tag被覆蓋。比如:消費者1訂閱tag1,消費者2訂閱tag2。最后map中只保存tag2.

  • 過濾的核心是是tag,tag被更新,過濾條件被改變。服務端過濾后只返回tag2的消息

  • 客戶端接收消息后,再次過濾。先啟動的消費者1訂閱tagA,但是服務端返回tag2,所以消費者1收不到任何消息。消費者2能收到一半的消息(集群模式,假設消息平均分配,另外一半分給tag2)

# 源碼分析

1、訂閱關系數據結構

2、消費者1啟動時注冊的訂閱關系

3、消費者2后啟動覆蓋訂閱關系

4、服務端過濾時取出ConsumerQueue的Hash(tag)

5、對比消息的Hash(tag)和之前保存的訂閱關系

7、客戶端過濾

熱文推薦

這份5G PPT這幾天在我的朋友圈刷屏了。

作為一名Java程序員,你竟然不知道Intrumentation!

總結

以上是生活随笔為你收集整理的消息长度_填坑笔记:RocketMQ消息订阅失败问题?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 不卡中文字幕在线观看 | 操极品女神| 一区二区三区不卡在线观看 | 在线一区av| 999黄色片 | 一区二区三区免费视频观看 | 成人人人人人欧美片做爰 | 综合色站导航 | 一本在线 | 国产一级二级在线 | 麻豆系列在线观看 | 国产精选久久久 | 看片一区二区 | 免费看片黄色 | 夜夜爽夜夜叫夜夜高潮漏水 | 国产一区二区免费电影 | 女优色图 | 爱爱的网站 | 91pron在线| 欧美日韩中文在线观看 | 亚洲午夜激情 | 欧美国产一区二区 | 日本一区二区三区久久 | 国产精品视频一区在线观看 | 精品久久在线观看 | 伊人春色在线视频 | 永久免费视频网站直接看 | 神马午夜一区 | 五月情婷婷 | 不卡视频在线观看 | 内射国产内射夫妻免费频道 | 亚洲天堂日本 | 小珊的性放荡羞辱日记 | 亚洲无人区码一码二码三码的含义 | 国产淫片av片久久久久久 | 欧美乱码精品一区二区三区 | 国产怡红院 | 午夜精品久久99蜜桃的功能介绍 | 亚洲制服一区二区 | 爱爱一区 | 日韩精品成人av | 五月天婷婷色 | 国产真实老熟女无套内射 | 亚洲网址在线观看 | 欧美a级成人淫片免费看 | a激情 | 九九九久久久精品 | 亚洲精品国产成人久久av盗摄 | 欧美一区二区日韩 | 国产午夜亚洲精品午夜鲁丝片 | 99久久人妻精品免费二区 | 久草资源在线观看 | 国产欧美日韩一区二区三区 | 日韩淫 | 337p粉嫩大胆噜噜噜噜69影视 | 黄网页在线观看 | 成熟女人毛片www免费版在线 | 国产一区在线观看视频 | 日日爽天天 | 天天操夜夜操狠狠操 | 狠狠干在线视频 | 丰满少妇大力进入 | 久久久精品麻豆 | 激情五月综合 | 日本不卡一区二区三区视频 | 希岛婚前侵犯中文字幕在线 | xxxxxxxx黄色片 | 亚洲AV无码久久精品国产一区 | 成人精品免费 | 91在线网 | 中文字幕一区二区三区四区 | 国产精品久久久久久久裸模 | 欧美激情综合五月色丁香 | 久久96视频 | 丰满岳跪趴高撅肥臀尤物在线观看 | 超碰综合 | 怒海潜沙秦岭神树 | 美日韩av在线 | 亚洲高清在线视频 | 国产成人看片 | 婷婷网址| 欧美一级片在线 | 99视频网站 | 日本少妇裸体 | 久久艳片www.17c.com | 99久久精品久久久久久清纯 | 男人操女人视频网站 | 久久久青草| 天天干天天摸天天操 | 光棍影院手机版在线观看免费 | 黄色激情网站 | 一卡二卡在线视频 | 欧美10p | 我们的2018中文免费看 | 天堂а√在线最新版中文在线 | 亚洲天堂男人av | 呦呦网 | 国产裸体永久免费无遮挡 | 白浆在线播放 |