精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深度好文! 圖解 RocketMQ 的系統架構

開發
本文用 7 張圖總結了 RocketMQ 的核心知識,希望能帶你快速入門。

今天給大家分享一篇我對學習 RocketMQ 系統架構核心知識點的梳理和總結,在講解時力求精簡、通俗易懂,通過圖解來給正在學習 RocketMQ 的小伙伴帶來幫助。RocketMQ 是阿里巴巴的分布式消息中間件,在 2012 年開源,在 2017 年成為 Apache 頂級項目。

1 集群架構

RocketMQ 的集群架構如下圖:

從上圖可以看到,整個集群中有四個角色: Name Server集群、Broker主從集群、Producer、Consumer。

1.1 Name Server 集群

Name Server 集群部署,但是節點之間并不會同步數據,因為每個節點都會保存完整的數據。因此單個節點掛掉,并不會對集群產生影響。

1.2 Broker

Broker 采用主從集群,實現多副本存儲和高可用。每個 Broker 節點都要跟所有的 Name Server 節點建立長連接,定義注冊 Topic 路由信息和發送心跳。

跟所有 Name Server 建立連接,就不會因為單個 Name Server 掛了影響 Broker 使用。Broker 主從模式中, Slave 節點主動從 Master 節點拉取消息。

1.3 Producer

Producer 跟 Name Server 的任意一個節點建立長連接,定期從 Name Server 拉取 Topic 路由信息。Producer 是否采用集群,取決于它所在的業務系統。

1.4 Consumer

Consumer 跟 Name Server 的任意一個節點建立長連接,定期從 Name Server 拉取 Topic 路由信息。Consumer 是否采用集群,取決于它所在的業務系統。

Producer 和 Consumer 只跟任意一個 Name Server 節點建立連接,因為 Broker 會向所有 Name Server 注冊 Topic 信息,所以每個 Name Server 保存的數據其實是一致的。

2 MessageQueue

Producer 發送的消息會在 Broker 的 MessageQueue 中保存,如下圖:

有了 MessageQueue ,Topic 就可以在 Broker 中實現分布式存儲,如上圖,Broker 集群中保存了 4 個MessageQueue,這些 MessageQueue 保存了 Topic1-Topic3 這三個 Topic 的消息。

MessageQueue 類似于 Kafka 中的 Partition,有了 MessageQueue,Producer 可以并發地向 Broker 中發送消息,Consumer 也可以并發地消費消息。

默認 Topic 可以創建的 MessageQueue 數量是 4,Broker 可以創建的 MessageQueue 數量是 8, RocketMQ 選擇二者中數量小的,也就是 4。不過這兩個值都可以配置。

3 Consumer

RocketMQ的消費模式如下圖:

圖中,Topic1 的消息寫入了兩個 MessageQueue,兩個隊列保存在 Broker1 和 Broker2 上。

RocketMQ 通過 Consumer Group 實現消息廣播。比如上圖中有兩個消費者組,每個消費者組有兩個消費者。

一個消費者可以消費多個 MessageQueue,但是同一個 MessageQueue 只能被同一個消費者組的一個消費者消費。比如 MessageQueue0 只能被 Consumer Group1 中的 Consumer1 消費, 不能被 Consumer2 消費。

4 Broker 高可用集群

Broker 集群如下圖:

Broker 通過主從集群來實現消息高可用。跟 Kafka 不同的是,RocketMQ 并沒有 Master 節點選舉功能,而是采用多 Master 多 Slave 的集群架構。Producer 寫入消息時寫入 Master 節點,Slave 節點主動從 Master 節點拉取數據來保持跟 Master 節點的數據一致。

Consumer 消費消息時,既可以從 Master 節點拉取數據,也可以從 Slave 節點拉取數據。 到底是從 Master 拉取還是從 Slave 拉取取決于 Master 節點的負載和 Slave 的同步情況 。如果 Master 負載很高,Master 會通知 Consumer 從 Slave 拉取消息,而如果 Slave 同步消息進度延后,則 Master 會通知 Consumer 從 Master 拉取數據。總之,從 Master 拉取還是從 Slave 拉取由 Master 來決定。

如果 Master 節點發生故障,RocketMQ 會使用基于 raft 協議的 DLedger 算法來進行主從切換。

Broker 每隔 30s 向 Name Server 發送心跳,Name Server 如果 120s 沒有收到心跳,就會判斷 Broker 宕機了。

5 消息存儲

RocketMQ 的存儲設計是非常有創造性的。存儲文件主要有三個:CommitLog、ConsumeQueue、Index。如下圖:

5.1 CommitLog

RocketMQ 的消息保存在 CommitLog 中,CommitLog 每個文件 1G 大小。有趣的是,文件名并不叫 CommitLog,而是用消息的偏移量來命名。比如第一個文件文件名是 0000000000000000000,第二個文件文件名是 00000000001073741824,依次類推就可以得到所有文件的文件名。

有了上面的命名規則,給定一個消息的偏移量,就可以根據二分查找快速找到消息所在的文件,并且用消息偏移量減去文件名就可以得到消息在文件中的偏移量。

R oc ketMQ 寫 CommitLog 時采用順序寫,大大提高了寫入性能。

5.2 ConsumeQueue

如果直接從 CommitLog 中檢索 Topic 中的一條消息,效率會很低,因為需要從文件的第一條消息開始依次查找。引入了 ConsumeQueue 作為 CommitLog 的索引文件,會讓檢索效率大增。

剛開始不理解 ConsumeQueue 和 MessageQueue 的區別,網上查了一些資料發現,每個ConsumeQueue對應一個上面介紹的 MessageQueue,MessageQueue 只是一個概念模型。

ConsumeQueue 中的元素內容如下:

  • 前 8 個字節記錄消息在 CommitLog 中的偏移量。
  • 中間 4 個字節記錄消息消息大小。
  • 最后 8 個字節記錄消息中 tag 的 hashcode。

這個 tag 的作用非常重要,假如一個 Consumer 訂閱了 TopicA,Tag1 和 Tag2,那這個 Consumer 的訂閱關系如下圖:

可以看到,這個訂閱關系是一個 hash 類型的結構,key 是 Topic 名稱,value 是一個 SubscriptionData 類型的對象,這個對象封裝了 tag。

拉取消息時,首先從 Name Server 獲取訂閱關系,得到當前 Consumer 所有訂閱 tag 的 hashcode 集合 codeSet,然后從 ConsumerQueue 獲取一條記錄,判斷最后 8 個字節 tag hashcode 是否在 codeSet 中,以決定是否將該消息發送給Consumer。

5.3 Index 文件

RocketMQ 支持按照消息的屬性查找消息,為了支持這個功能,RocketMQ 引入了 Index 索引文件。Index 文件有三部分組成,文件頭 IndexHead、500萬個 hash 槽和 2000 萬個 Index 條目組成。

5.3.1 IndexHead

總共有 6 個元素組成,前兩個元素表示當前這個 Index 文件中第一條消息和最后一條消息的落盤時間,第三、第四兩個元素表示當前這個 Index 文件中第一條消息和最后一條消息在 CommitLog 文件中的物理偏移量,第五個元素表示當前這個 Index 文件中 hash 槽的數量,第六個元素表示當前這個 Index 文件中索引條目的個數。

查找的時候除了傳入 key 還需要傳入第一條消息和最后一條消息的落盤時間,這是因為 Index 文件名是時間戳命名的,傳入落盤時間可以更加精確地定位 Index 文件。

5.3.2 Hash 槽

熟悉 Java 中 HashMap 的同學應該都比較熟悉 Hash 槽這個概念了,其實就是 Hash 結構的底層數組。Index 文件中的 Hash 槽有 500 萬個數組元素,每個元素是 4 個字節 int 類型元素,保存當前槽下最新的那個 index 條目的序號。

這里 Hash 槽解決 Hash 沖突的方式是鏈表法,如下圖:

5.3.3 Index 條目

每個 Index 條目中,key 的 hashcode 占 4 個字節,phyoffset 表示消息在 CommitLog 中的物理偏移量占 8 個字節,timediff  表示消息的落盤時間與 header 里的 beginTimestamp 的差值占 4 個字節,pre index no 占 4 個字節。

pre index no 保存的是當前的 Hash 槽中前一個 index 條目的序號,一般在 key 發生 Hash 沖突時才會有值,否則這個值就是 0,表示當前元素是 Hash 槽中第一個元素。

In dex 條目中保存 timediff,是為了防止 key 重復。 查找 key 時,在 key 相同的情況下, 如果傳入的時間范圍跟 timediff 不滿足,則會查找 pre index no 這個條目。

5.3.4 本節總結

通過上面的分析,我們可以總結一個通過 key 在 Index 文件中查找消息的流程,如下:

  1. 計算 key 的 hashcode;
  2. 根據 hashcode 在 Hash 槽中查找位置 s;
  3. 計算 Hash 槽在 Index 文件中位置 40+(s-1)*4;
  4. 讀取這個槽的值,也就是Index條目序號 n;
  5. 計算該 index 條目在 Index 文件中的位置,公式:40 + 500萬 * 4 + (n-1) * 20;
  6. 讀取這個條目,比較 key 的 hashcode 和 index 條目中 hashcode是否相同,以及 key 傳入的時間范圍跟 Index 條目中的 timediff 是否匹配。如果條件不符合,則查找 pre index no 這個條目,找到后,從 CommitLog 中取出消息。

6 刷盤策略

Rocket MQ 采用靈活的刷盤策略。

6.1 異步刷盤

消息寫入 CommitLog 時,并不會直接寫入磁盤,而是先寫入PageCache 緩存中,然后用后臺線程異步把消息刷入磁盤。異步刷盤策略就是消息寫入 PageCache  后立即返回成功,這樣寫入效率非常高。如果能容忍消息丟失,異步刷盤是最好的選擇。

6.2 同步刷盤

即使同步刷盤,RocketMQ 也不是每條消息都要刷盤,線程將消息寫入內存后,會請求刷盤線程進行刷盤,但是刷盤線程并不會只把當前請求的消息刷盤,而是會把待刷盤的消息一同刷盤。同步刷盤策略保證了消息的可靠性,但是也降低了吞吐量,增加了延遲。

7 總結

本文用 7 張圖總結了 RocketMQ 的核心知識,希望能帶你快速入門。

責任編輯:張燕妮 來源: 君哥聊技術
相關推薦

2022-03-29 15:10:22

架構設計模型

2015-07-10 16:20:26

集群

2015-07-13 11:21:18

集群文件系統分布式存儲HDFS

2025-02-25 10:50:11

2018-01-02 09:17:24

機器學習廣告推薦系統

2009-03-03 20:44:06

桌面虛擬化Xendesktop虛擬化

2021-07-09 07:15:48

RocketMQ數據結構kafka

2025-02-27 08:50:00

RocketMQ開發代碼

2022-11-08 00:00:00

監控系統Prometheus

2022-02-18 08:22:23

RocketMQ存儲架構

2022-08-29 08:33:42

IaaSPaaS云服務

2023-12-18 10:08:56

2018-04-03 09:27:42

分布式架構系統

2023-02-20 08:27:17

2023-12-27 13:54:00

RocketMQJava架構

2023-07-03 17:15:12

系統架構設計

2019-09-18 10:22:13

操作系統LinuxCentOSMac

2021-12-07 07:32:09

kafka架構原理

2021-09-01 09:52:52

路由器計算機架構

2024-10-30 10:06:51

點贊
收藏

51CTO技術棧公眾號

欧美视频精品在线观看| 91色porny| 欧美激情二区三区| 狠狠人妻久久久久久综合蜜桃| 成人av观看| 亚洲视频在线一区| 国产一区二区中文字幕免费看| 少妇太紧太爽又黄又硬又爽| 色天天综合网| 亚洲第一区中文字幕| av无码精品一区二区三区| 国产网友自拍视频导航网站在线观看| 成人精品电影在线观看| 国产精品久久不能| 国产精品第108页| 日韩国产一区| 国产丝袜一区二区三区免费视频| 天天久久综合网| 范冰冰一级做a爰片久久毛片| 亚洲婷婷在线视频| 奇米影视首页 狠狠色丁香婷婷久久综合| 国产乱码精品一区二区三区精东| 久久久www| 久久久久久久影院| 日韩成人短视频| 成人a'v在线播放| 日韩av在线资源| 特黄特色免费视频| 99精品美女视频在线观看热舞| 欧美性猛交xxxx乱大交| 狠狠干视频网站| 亚洲成人三级| 亚洲国产岛国毛片在线| 精品视频导航| 国产 日韩 欧美 精品| 极品少妇xxxx精品少妇| 国产国产精品人在线视| 日韩三级视频在线| 在线欧美福利| 欧美日韩国产成人在线| 欧美风情第一页| 欧美激情理论| 日韩中文在线视频| 国产wwwwxxxx| 久久一区二区中文字幕| 在线视频精品一| 怡红院一区二区三区| 中文字幕中文字幕精品| 亚洲精品视频久久| 欧美丰满少妇人妻精品| 欧美精品中文字幕亚洲专区| 日韩av中文字幕在线播放| 欧美精品欧美极品欧美激情| 爱爱精品视频| 亚洲国产精品久久| 五十路六十路七十路熟婆| 乱亲女h秽乱长久久久| 亚洲а∨天堂久久精品9966| zjzjzjzjzj亚洲女人| 国产精品网在线观看| 亚洲大胆人体在线| 亚洲AV无码国产精品| 亚洲制服欧美另类| 亚洲欧美在线看| 久久久久久国产免费a片| av一区二区高清| 色先锋资源久久综合5566| 永久免费看mv网站入口| 欧美激情偷拍| 91精品国产电影| 国产美女激情视频| 美美哒免费高清在线观看视频一区二区 | 久久福利小视频| 伊人久久大香线蕉无限次| 国产午夜精品全部视频播放| 男人在线观看视频| 好吊一区二区三区| 国产成人高潮免费观看精品| 在线观看免费中文字幕| 国产精品一级在线| 精品网站在线看| 成人免费一区二区三区视频网站| 国产欧美精品一区二区色综合| 一区二区三区电影| 日本孕妇大胆孕交无码| 欧美性xxxx在线播放| www.涩涩涩| 日韩影片在线观看| 亚洲四色影视在线观看| 黑人狂躁日本娇小| 日韩图片一区| 国产裸体写真av一区二区 | 国产一区二区三区三区在线观看| 国产精品丝袜一区二区| 国产欧美精品久久| 国产欧美一区二区| 视频二区在线观看| 国产精品麻豆网站| 国产一区二区在线视频播放| 成人免费视频观看| 亚洲国产精品va在线看黑人动漫| 亚洲精品视频网址| 亚洲每日更新| 亚洲自拍中文字幕| 黄色软件在线观看| 亚洲国产精品一区二区久久| 91小视频网站| 日韩极品少妇| 欧美乱妇高清无乱码| 欧美成人一区二区视频| 北条麻妃国产九九精品视频| 亚洲人成网站在线播放2019| 色老头在线一区二区三区| 91精品国产黑色紧身裤美女| 美女爆乳18禁www久久久久久 | 三年中国国语在线播放免费| 97久久综合区小说区图片区| 色偷偷偷亚洲综合网另类| 欧美一二三区视频| 国产成人免费在线观看| 中文精品视频一区二区在线观看| 欧美成人精品一区二区男人小说| 欧美成人三级电影在线| 麻豆一区在线观看| 日本不卡123| 热舞福利精品大尺度视频| 精品众筹模特私拍视频| 欧美精品一级二级| 一级黄色片网址| 国产精品毛片在线| 国产伦精品一区二区三区高清| 免费超碰在线| 欧美日韩国产首页| 国产又粗又猛又爽又黄的视频四季 | 国产伦精品一区二区三区视频痴汉 | 日日摸夜夜添夜夜添国产精品| 九色综合婷婷综合| 免费男女羞羞的视频网站在线观看| 欧美日韩国产三级| 天天操天天摸天天舔| 日韩成人精品在线观看| 欧美日韩一区二区三区免费| 成人影院大全| 亚洲图片在线综合| 国产精品成人久久久| www久久精品| 毛片av免费在线观看| 综合亚洲色图| 国产精品99久久久久久人 | 26uuu精品一区二区在线观看| 免费看毛片的网址| 精品国产午夜肉伦伦影院| 高清欧美性猛交xxxx黑人猛交| 午夜精品久久久久久久91蜜桃| 亚洲男人都懂的| 国产chinesehd精品露脸| 欧美高清日韩| 国产精品自拍首页| 美女av在线免费看| 亚洲欧美中文另类| 中文字幕人妻一区二区在线视频| 国产亲近乱来精品视频 | 成人h动漫精品| 亚洲中文字幕无码av永久| 日韩欧美四区| 国产精品老女人精品视频| 麻豆视频在线播放| 精品久久久久一区| 亚洲 欧美 日韩 综合| 国产日韩v精品一区二区| 日韩在线不卡一区| 国产在线不卡| 欧美高清性xxxxhdvideosex| 狠狠久久综合| 欧美极品少妇xxxxx| 爽爽视频在线观看| 欧美日韩免费观看一区三区| 精品自拍偷拍视频| 91视频国产观看| 中文字幕中文在线| 日韩午夜激情| 一区二区精品在线| 日韩av午夜| 国产在线日韩在线| 国产一二在线播放| 日韩在线免费视频观看| 国产小视频一区| 在线看日韩精品电影| 青娱乐国产盛宴| 久久久久久久久一| 中文字幕一区二区三区人妻在线视频 | 久久99精品国产99久久6尤物| 亚洲AV成人无码一二三区在线| 欧美日韩免费观看一区三区| 日本三级黄色大片| 亚洲欧洲99久久| 性色av蜜臀av色欲av| 国产精品性做久久久久久| 熟妇人妻va精品中文字幕| 欧美.www| 一区二区三区久久网| 日韩激情毛片| www日韩av| 国产精品原创视频| 欧美亚洲成人精品| av片在线观看永久免费| 亚洲性夜色噜噜噜7777| 亚洲精品无码久久久| 欧美日韩亚洲丝袜制服| 国产小视频在线免费观看| 亚洲综合在线观看视频| 国产精品久久久视频| 99精品视频一区二区三区| 亚洲综合伊人久久| 免费在线观看一区二区三区| 国产v片免费观看| 牛夜精品久久久久久久99黑人| 色狠狠久久av五月综合| 亚洲精品亚洲人成在线观看| 国产精品推荐精品| av在线国产精品| 国产日韩欧美自拍| 欧美美女福利视频| 国产经典一区二区| 国产伦精品一区二区三区视频金莲| 欧美日韩福利在线观看| 超鹏97在线| 久久精品国产亚洲精品2020| 日本在线免费中文字幕| 一区二区三区日韩在线| 国产在线资源| 亚洲男人天堂2019| 肉丝一区二区| 亚洲精品永久免费| 亚洲欧美日本在线观看| 日韩激情片免费| 凸凹人妻人人澡人人添| 精品国产电影一区二区| 高h震动喷水双性1v1| 精品毛片乱码1区2区3区| 性一交一乱一色一视频麻豆| 91精品麻豆日日躁夜夜躁| 国产精品探花视频| 69堂精品视频| 国产a级免费视频| 日韩视频免费观看高清完整版 | 中国色在线观看另类| 国产成人福利在线| 久久久亚洲精品石原莉奈| 国产交换配乱淫视频免费| 久久女同性恋中文字幕| av网站免费在线看| 国产精品嫩草久久久久| 精品一区二区在线观看视频| 最新成人av在线| 久久久久久久国产视频| 亚洲一区二区三区小说| 激情五月色婷婷| 韩曰欧美视频免费观看| 日批视频免费在线观看| 欧美亚洲日本一区| 国产又黄又大又爽| 欧美大片在线观看一区| 天天操天天干天天| 国产亚洲精品久久久久久| 最新国产在线观看| 欧美精品一区二区免费| 136福利第一导航国产在线| 青青草国产精品一区二区| 99九九久久| av一本久道久久波多野结衣| 欧美日韩一区二区三区在线电影 | 亚洲天堂久久| 欧美日韩亚洲第一| 美女视频网站黄色亚洲| 97免费公开视频| 2欧美一区二区三区在线观看视频| 国产精品久久久视频| 亚洲综合在线第一页| 一级黄色av片| 欧美成人在线直播| 国产高清在线| 欧美激情精品久久久久久变态| av高清不卡| 91视频免费在线观看| 香蕉人人精品| 亚洲精品天堂成人片av在线播放 | 一区二区三区欧美| 午夜久久久久久久久久影院| 日韩一二三四区| 欧美老女人性开放| 欧美人在线观看| 欧美123区| 精品久久sese| 影视一区二区| 毛葺葺老太做受视频| 粉嫩绯色av一区二区在线观看| 国产传媒在线看| 高潮白浆女日韩av免费看| 99视频在线观看免费| 永久555www成人免费| 国产美女高潮在线观看| 成人天堂噜噜噜| 蜜乳av综合| 日本少妇高潮喷水视频| 国产麻豆精品视频| 大胸美女被爆操| 狠狠色噜噜狠狠狠狠97| 午夜精品久久久久久久99老熟妇| 一区二区亚洲精品国产| 日韩激情电影| 成人蜜桃视频| 一本一道久久综合狠狠老| 男女爽爽爽视频| 91香蕉视频污在线| 国产一二三四在线| 欧美一区二区视频在线观看| 午夜视频在线观看免费视频| 日本精品中文字幕| 久久综合五月婷婷| 日本精品久久久久久久久久| 国产乱人伦偷精品视频免下载| 福利视频第一页| 欧美自拍偷拍一区| 牛牛影视精品影视| 欧亚精品在线观看| 精品国产一区二区三区不卡蜜臂 | 三级全黄做爰视频| 欧美性色黄大片| 国产私人尤物无码不卡| 日韩免费在线观看视频| 日韩欧美影院| 黄www在线观看| 97se亚洲国产综合在线| 日韩免费一级片| 亚洲成人黄色在线| 国精一区二区三区| 成人精品一二区| 欧美日韩亚洲一区二区三区在线| 国产乱码一区二区三区四区| 国产精品久久久久精k8| 亚洲天堂视频网| 少妇激情综合网| 96视频在线观看欧美| 中文字幕第50页| 国产a级毛片一区| 久久综合综合久久| 精品国产免费人成电影在线观看四季 | 欧美精品九九久久| 超碰精品在线| 欧美 日韩 激情| 国产日韩欧美不卡| 91亚洲精品国偷拍自产在线观看| www.日韩系列| 欧州一区二区三区| 人妻av中文系列| 国产午夜精品一区二区三区视频 | 欧美videossex极品| 亚洲欧洲一区二区三区在线观看| 高清电影一区| 亚洲午夜高清视频| 国产乱码精品一区二区三| 国产亚洲精品久久久久久打不开| 亚洲国产精品va| 免费成人美女女| 天堂av在线中文| 成人av先锋影音| 91porny九色| 免费av在线一区| 好吊妞国产欧美日韩免费观看网站| 2022亚洲天堂| 中文字幕在线一区免费| 成人免费一级视频| 欧美亚洲日本网站| 999国产精品999久久久久久| 亚洲麻豆一区二区三区| 色天天综合色天天久久| 黄色网址在线免费播放| 国产福利久久精品| 日本美女一区二区三区视频| √天堂中文官网8在线| 日韩精品中文字幕在线观看| 九九热这里有精品| 高清欧美精品xxxxx| 久久影院午夜论| aaa级黄色片| 国产成人午夜视频网址| 欧美精品导航| 国产精品久久久视频| 亚洲变态欧美另类捆绑| 国产91在线播放精品| 亚洲精品无码国产| 国产精品伦理一区二区| 人妻偷人精品一区二区三区| 国产日韩精品电影| 99热在线精品观看| 国产极品国产极品| 亚洲一级黄色片| 日韩激情毛片| 日本少妇xxxx软件|