精品欧美一区二区三区在线观看 _久久久久国色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| 中文字幕一区二区人妻| 久久久久久毛片免费看| 色综合欧美在线| 亚洲在线免费看| 青青操免费在线视频| 色综合久久一区二区三区| 亚洲成a人v欧美综合天堂| 国产亚洲欧美另类一区二区三区| 日本黄色大片在线观看| av大片在线| 国产欧美1区2区3区| 成人18视频| 一区二区自拍偷拍| 久久午夜鲁丝片午夜精品| 日韩经典av| 337p粉嫩大胆噜噜噜噜噜91av| 韩国三级日本三级少妇99| www.成人av.com| 中文字字幕在线中文| 爽爽窝窝午夜精品一区二区| 在线播放日韩导航| 日本女优爱爱视频| 松下纱荣子在线观看| 久久在线精品| 7777精品久久久久久| 欧美丰满艳妇bbwbbw| 视频二区欧美| 亚洲成人www| 大桥未久一区二区| 国产午夜视频在线观看| 91在线国产福利| 国产嫩草一区二区三区在线观看| 国产普通话bbwbbwbbw| 青娱乐精品在线视频| 2018日韩中文字幕| 在线观看中文字幕视频| 精品电影一区| 国精产品一区一区三区有限在线| 加勒比婷婷色综合久久| 久久精品国产大片免费观看| 亚洲欧洲日产国码av系列天堂| a级一a一级在线观看| 日本一区影院| 欧美sm极限捆绑bd| 一本之道在线视频| 欧美一级片网址| 91精品国产一区二区三区| 成 人 黄 色 小说网站 s色| 日韩成人亚洲| 欧美日韩夫妻久久| 爱爱爱爱免费视频| 亚洲色图图片| 日韩午夜在线影院| 亚洲av无码成人精品区| 91麻豆精品激情在线观看最新| 51精品视频一区二区三区| 在线观看免费污视频| 男人亚洲天堂| 欧美精品日韩精品| 一区二区三区人妻| 风间由美性色一区二区三区四区 | 欧美精品激情视频| 国产精品第108页| 国产欧美日韩亚洲一区二区三区| 97超级碰在线看视频免费在线看| 久久久久99精品成人片三人毛片| 久久精品综合| 国产日韩在线一区| 性生活视频软件| 99久久精品国产麻豆演员表| 秋霞在线观看一区二区三区| www.av在线| 一区二区三区在线视频免费 | 免费日韩av片| 国产精品电影一区| 国产av一区二区三区| 久久三级中文| 日韩精品有码在线观看| 欧美国产激情18| 久草免费新视频| 久久狠狠婷婷| 91色精品视频在线| 天堂成人在线观看| 国产精品你懂的在线| 性生活免费观看视频| 国产免费拔擦拔擦8x在线播放 | 国产精品嫩草99a| 日本久久久网站| 黑人巨大精品欧美一区二区桃花岛| 在线观看不卡一区| 色哟哟网站在线观看| 久久不见久久见免费视频7| 日韩亚洲第一页| 日韩久久精品视频| 另类小说一区二区三区| 国产欧美日韩在线播放| 成人影视在线播放| 亚洲午夜电影在线观看| 久久精品网站视频| 成人爽a毛片免费啪啪红桃视频| 亚洲天堂成人在线视频| 久久机热这里只有精品| 日本va欧美va瓶| 国产日韩精品久久| 国产高清一区二区三区视频 | 艳妇乳肉豪妇荡乳av| 不卡视频一二三| 在线视频亚洲自拍| free欧美| 日韩av中文字幕在线免费观看| 情侣偷拍对白清晰饥渴难耐| 亚洲欧美日韩国产| 国产传媒欧美日韩| 免费不卡视频| 欧美综合一区二区三区| 成人性生活免费看| 欧美aa国产视频| 国产精品网站视频| 黄色片在线免费看| 精品国产乱码久久久久久天美| 中文字幕日韩久久| 欧美岛国激情| 国产精品视频永久免费播放| 午夜18视频在线观看| 视频一区在线| 日韩精品一区二区三区三区免费| 国产又粗又硬视频| 久久精品亚洲| 欧美裸体网站| 欧美日韩国产v| 日韩国产一区三区| 日本中文字幕在线免费观看| 国产高清精品在线| 蜜臀av.com| 国产精品va视频| 日韩在线观看精品| 一级黄色片在线观看| 国产精品污www在线观看| 国产天堂在线播放| 不卡在线一区| 国产脚交av在线一区二区| 人成在线免费视频| 色呦呦国产精品| 瑟瑟视频在线观看| 日韩电影在线观看网站| 视频一区在线免费观看| 99久久er| 久久这里只有精品99| 国产精品久久免费| 亚洲男同性视频| 18深夜在线观看免费视频| 欧美在线91| 国产精品播放| 日本不卡免费高清视频在线| 亚洲精品一区久久久久久| 日本熟女毛茸茸| 欧美激情一区二区三区不卡| 性欧美1819| 欧美 日韩 国产 一区| 不卡一卡2卡3卡4卡精品在| 狂野欧美激情性xxxx欧美| 亚洲高清久久久久久| 国产美女激情视频| 中文字幕电影一区| 红桃视频一区二区三区免费| 黄色综合网站| 欧美精品亚洲| 日韩欧国产精品一区综合无码| 久久亚洲精品成人| 神马一区二区三区| 欧美午夜精品一区| 国产大学生自拍| 99热精品国产| 亚洲精品久久久久久宅男| 欧美在线精品一区| 国产丝袜不卡| 国产极品嫩模在线观看91精品| 亚洲一区二区网站| 91在线视频精品| caoporn视频在线观看| 国产亚洲精品久久久久久| 91无套直看片红桃| 欧美日韩精品在线观看| 国产又粗又猛又爽又黄的视频四季| 国产在线视频不卡二| 国产精品自拍片| 99精品全国免费观看视频软件| 成人资源av| 成人在线不卡| 久久免费成人精品视频| 啊v视频在线| 亚洲国产精彩中文乱码av在线播放 | 久久国产精品国产精品| 国产一区二区三区四区三区四| 欧美一区二区影视| 超碰97久久| 国产综合香蕉五月婷在线| 欧美办公室脚交xxxx| www.久久撸.com| 奇米影视888狠狠狠777不卡| 91精品国产乱码| 免费一级a毛片| 亚洲动漫第一页| av资源在线免费观看| 久久综合av免费| 国产免费a级片| 激情欧美日韩一区二区| 午夜肉伦伦影院| 激情综合在线| 国产91porn| 日韩精品诱惑一区?区三区| 免费在线观看一区二区| 国产66精品| 91亚色免费| 精品91福利视频| 国产精品一区二区三区免费视频| 中文字幕资源网在线观看免费 | 日本a级c片免费看三区| 亚洲一级电影视频| 黄视频网站免费看| 国产精品国产三级国产a| mm131丰满少妇人体欣赏图| 波多野结衣在线aⅴ中文字幕不卡| 欧美高清精品一区二区| 捆绑调教一区二区三区| 亚洲三级视频网站| 亚洲欧美日韩一区在线观看| www.亚洲视频.com| 欧美高清一区| 欧美艳星brazzers| 免费又黄又爽又色的视频| 亚洲欧洲av色图| 国产黄色片在线| 亚洲国产精品t66y| 国产毛片久久久久久久| 久久免费国产精品| 亚洲av无码成人精品国产| 97精品国产97久久久久久久久久久久| 不许穿内裤随时挨c调教h苏绵| 国产一区二区三区免费看| 国产美女视频免费看| 韩国v欧美v日本v亚洲v| 国产无遮挡猛进猛出免费软件| 麻豆国产精品一区二区三区 | 国产福利一区二区三区视频 | 久久久精品黄色| 非洲一级黄色片| 国产女同性恋一区二区| 538精品视频| 亚洲欧洲日产国产综合网| 国产高潮流白浆| 亚洲精品中文在线| 久久精品www人人爽人人| 亚洲一区二区三区四区在线观看 | 日本aⅴ精品一区二区三区 | 97精品资源在线观看| 亚洲在线免费看| 国内视频在线精品| 秋霞久久久久久一区二区| 三区四区不卡| 欧美做暖暖视频| 国产日韩欧美一区在线| 亚洲精品中文字幕无码蜜桃| 欧美aⅴ一区二区三区视频| 中文字幕亚洲影院| 成人一区二区三区视频在线观看 | 亚洲国产精彩视频| 日韩成人在线观看| 波多野结衣在线影院| 美日韩精品免费观看视频| 成全电影大全在线观看| 日韩av不卡电影| 国内不卡的一区二区三区中文字幕 | 久久影视电视剧免费网站| 7777kkk亚洲综合欧美网站| 国产91在线视频| 欧美专区一区| 欧美日韩亚洲在线| 亚洲天天综合| 欧美女人性生活视频| 精品在线播放午夜| 久久精品视频va| 一本一道波多野毛片中文在线| 久久亚洲国产精品| 美女100%一区| 97se国产在线视频| 国产精品视频一区二区三区四蜜臂| 亚洲欧洲一区二区在线观看| 亚洲激情亚洲| 久久人人爽av| 99精品视频一区二区| 日本在线一级片| 91福利社在线观看| 日韩中文字幕免费观看| 中文字幕久热精品视频在线| 色婷婷在线播放| 国产精品亚洲网站| 欧美日韩看看2015永久免费 | 国产精品白丝喷水在线观看| 欧美性色19p| 亚洲成人第一区| 深夜福利日韩在线看| 日韩影院在线| yy111111少妇影院日韩夜片| 久久综合88| 日韩av播放器| jlzzjlzz亚洲日本少妇| 天天操夜夜操av| 91精品办公室少妇高潮对白| 老牛影视av牛牛影视av| 久久精品福利视频| 91另类视频| 日本精品一区二区三区不卡无字幕| 欧美日韩专区| 国产精品嫩草影视| 国产精品亲子乱子伦xxxx裸| 久久久蜜桃一区二区| 亚洲精品狠狠操| а√在线中文网新版地址在线| 亚洲一区二区中文字幕| 三上亚洲一区二区| 手机看片福利日韩| 国产日产欧美一区| 久久久蜜桃一区二区| 亚洲人成电影网站色www| 乡村艳史在线观看| 国产区欧美区日韩区| 国产精品v亚洲精品v日韩精品| www.桃色.com| 亚洲视频1区2区| 91亚洲精品国偷拍自产在线观看 | 亚洲午夜免费福利视频| 波多野结衣激情视频| 日韩精品在线免费| av资源在线播放| 国产欧美精品在线| 成人av动漫在线观看| 丰满少妇在线观看| 国产视频一区二区在线| 老熟妇一区二区三区| 亚洲人成欧美中文字幕| 欧美大电影免费观看| 免费试看一区| 日韩一区精品视频| 国产18无套直看片| 欧美日韩免费观看一区三区| 888av在线| 亚洲自拍av在线| 国产综合色产| 精品无码在线视频| 在线观看91精品国产入口| www.黄在线观看| 2022国产精品| 日韩视频中文| 日韩一级av毛片| 欧美一级久久久| 91超碰在线播放| 欧美一进一出视频| 久久精品国产免费| 久久久久久久久久久久久久免费看| 精品久久久久久综合日本欧美| av在线天堂网| 亚洲精品乱码久久久久久日本蜜臀| 国产sm主人调教女m视频| 久久久久国色av免费观看性色 | 在线观看 中文字幕| 日韩精品久久久久| 素人啪啪色综合| 亚洲天堂第一区| 91女神在线视频| 国产精品久久久久久无人区| 久久久噜噜噜久久中文字免| 免费欧美一区| 肉色超薄丝袜脚交| 都市激情亚洲色图| 乱人伦中文视频在线| 极品尤物一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 制服丝袜中文字幕一区| av人人综合网| 亚洲精品乱码久久久久久蜜桃91| 国产精品一区免费在线观看| 日韩精品一区二区亚洲av| yw.139尤物在线精品视频| 国产一区二区三区亚洲| 麻豆三级在线观看| 午夜精品一区二区三区电影天堂 | 午夜精品久久久久影视| 成年网站在线| 国产欧美亚洲日本| 麻豆国产欧美日韩综合精品二区| 日韩欧美一区二区一幕| 日韩亚洲欧美中文高清在线| 人体久久天天| 初高中福利视频网站| 欧洲国内综合视频| 美女av在线免费看| 男人c女人视频|