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

七張圖帶你輕松入門RocketMQ

開發 前端
RocketMQ 是阿里巴巴的分布式消息中間件,在 2012 年開源,在 2017 年成為 Apache 頂級項目。

[[437202]]

本文轉載自微信公眾號「程序員jinjunzhu」,作者jinjunzhu 。轉載本文請聯系程序員jinjunzhu公眾號。

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,依次類推就可以得到所有文件的文件名。

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

RocketMQ 寫 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 槽中第一個元素。

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

5.3.4 本節總結

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

計算 key 的 hashcode;

根據 hashcode 在 Hash 槽中查找位置 s;

計算 Hash 槽在 Index 文件中位置 40+(s-1)*4;

讀取這個槽的值,也就是Index條目序號 n;

計算該 index 條目在 Index 文件中的位置,公式:40 + 500萬 * 4 + (n-1) * 20;

讀取這個條目,比較 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 的核心知識,希望能帶你快速入門。

 

責任編輯:武曉燕 來源: 程序員jinjunzhu
相關推薦

2023-04-11 08:35:22

RocketMQ云原生

2022-06-13 11:05:35

RocketMQ消費者線程

2022-07-11 11:06:11

RocketMQ函數.消費端

2020-09-23 11:23:25

推薦系統廣告

2022-07-04 11:06:02

RocketMQ事務消息實現

2022-06-27 11:04:24

RocketMQ順序消息

2024-08-26 08:44:54

2018-03-09 14:59:02

F5應用交付

2022-03-18 13:58:00

RocketMQ消息隊列

2022-05-09 11:15:05

RocketMQPULL 模式PUSH 模式

2022-01-24 20:40:55

JavastreamLambda

2020-06-28 07:39:44

Kafka分布式消息

2022-09-22 08:32:30

RocketMQLinuxWindows

2022-07-29 16:28:19

Kubernetes通信服務通信

2021-09-14 23:05:47

Nginx前端運維

2022-02-28 11:10:42

ZGCG1收集器

2020-11-16 10:50:27

KubernetesIngressLinux

2022-02-23 15:08:18

開發分布式Java

2021-05-07 17:11:19

負載均衡運維服務

2022-09-27 12:00:58

HadoopK8S開源
點贊
收藏

51CTO技術棧公眾號

欧美高清成人| 国产成人自拍网站| 黄色综合网址| 久久久99久久| 国产精品福利在线观看| 国产馆在线观看| 祥仔av免费一区二区三区四区| 国产精品久久久久影院| 91人成网站www| 国产免费无码一区二区视频| 亚洲经典视频| 一本到高清视频免费精品| 日韩欧美一区二区视频在线播放| 中文字字幕在线中文乱码| 99久久精品网| 亚洲成人精品久久| 黑鬼大战白妞高潮喷白浆| 高清av电影在线观看| 狠狠久久亚洲欧美| 欧美精品18videosex性欧美| 无码任你躁久久久久久老妇| 精品网站在线| 一区二区三区自拍| 欧美h视频在线| 国产av精国产传媒| 青青草国产精品亚洲专区无| 欧美美最猛性xxxxxx| 欧美深性狂猛ⅹxxx深喉| 丁香久久综合| 亚洲欧洲韩国日本视频| 国产一区福利视频| 在线观看国产小视频| 精品av久久久久电影| 国产一区二区三区丝袜| 在线免费看污网站| 日本h片在线观看| 国产喂奶挤奶一区二区三区| 亚洲影院高清在线| 日本久久综合网| 欧美区一区二| 久久中文精品视频| 亚洲色图27p| 国产一区日韩| 亚洲人成伊人成综合网久久久 | 91亚洲永久免费精品| 丰满少妇xoxoxo视频| 亚洲乱码视频| 久久久噜久噜久久综合| 黄色片子在线观看| 希岛爱理一区二区三区| 中文字幕免费精品一区| japanese中文字幕| 竹菊久久久久久久| 亚洲精品中文字幕有码专区| 亚洲婷婷在线观看| 国产色噜噜噜91在线精品| 日韩欧美在线1卡| 国产探花在线观看视频| 97精品资源在线观看| 欧美日韩久久不卡| 蜜臀一区二区三区精品免费视频| 91天天综合| 欧美三级蜜桃2在线观看| 亚洲成人福利在线观看| av在线播放一区| 欧美日韩大陆一区二区| www.超碰97.com| 国产成年精品| 欧美大胆一级视频| 催眠调教后宫乱淫校园| 日韩成人av在线资源| 亚洲欧美日韩高清| 欧美巨胸大乳hitomi| 999视频精品| 欧美国产日韩一区| 日本天堂在线视频| 天天影视网天天综合色在线播放 | 3d动漫啪啪精品一区二区免费| 91片黄在线观看喷潮| 国产资源精品在线观看| 97伦理在线四区| 日本免费网站在线观看| 91啪九色porn原创视频在线观看| 久久久久资源| avtt在线播放| 亚洲欧美偷拍卡通变态| 国产91在线亚洲| 6699嫩草久久久精品影院| 欧美日韩人人澡狠狠躁视频| 久久精品视频91| 亚洲人体在线| 亚洲国产精品久久91精品| 精品无码一区二区三区| 久久在线免费| 欧美精品久久久久久久久| 黄色大片网站在线观看| 青青草国产成人99久久| 成人黄动漫网站免费| 无码国产精品96久久久久| 欧美国产1区2区| 老司机激情视频| 嗯~啊~轻一点视频日本在线观看| 一本到不卡精品视频在线观看| 成人性生交免费看| 国产成人aa在线观看网站站| 国产手机视频精品| 欧美特级一级片| 天堂在线一区二区| av色综合网| 欧美色视频免费| 亚洲精品ww久久久久久p站| 日韩视频第二页| 免费观看亚洲视频大全| 国产性猛交xxxx免费看久久| 国产亚洲欧美久久久久| 美女视频一区在线观看| 精品国产免费一区二区三区| 亚洲三区在线播放| 亚洲视频网在线直播| 18岁视频在线观看| 国产精品1luya在线播放| 色婷婷久久一区二区| 精品成人av一区二区在线播放| 国产在线视视频有精品| 区一区二区三区中文字幕| 黄色污污视频在线观看| 欧美酷刑日本凌虐凌虐| 日本成人免费视频| 香蕉国产精品偷在线观看不卡| 亚洲一区亚洲二区亚洲三区| 在线观看黄av| 色嗨嗨av一区二区三区| 欧美xxxxx精品| 雨宫琴音一区二区三区| 国产精品美女久久久免费| 午夜影院免费视频| 亚洲一区二区不卡免费| 日批视频在线看| 99精品网站| 国产精品自产拍在线观看| a v视频在线观看| 九九国产精品视频| 日韩精品国内| 亚洲精品永久免费视频| 精品美女在线播放| 放荡的美妇在线播放| 蜜桃一区二区三区在线观看| 欧美日韩亚洲综合一区二区三区激情在线| 国产盗摄在线视频网站| 日韩免费在线观看| 激情四射综合网| 国产一区二区福利| 综合网五月天| av日韩一区| 久久精品久久久久| 国产精品九九九九| 国产精品日韩精品欧美在线| 国产精品69页| 欧美精品momsxxx| 国产成人在线精品| 黄色软件在线| 欧美羞羞免费网站| 亚洲欧洲综合网| 国产精品夜夜嗨| 欧美人与动牲交xxxxbbbb| 激情五月综合婷婷| 九九久久久久99精品| 后进极品白嫩翘臀在线视频| 亚洲国产美国国产综合一区二区| 在线观看亚洲免费视频| 99在线|亚洲一区二区| 久久99精品久久久水蜜桃| 深夜成人影院| 日韩亚洲第一页| 国内精品久久久久久久久久久| 亚洲国产精品一区二区www在线 | 国产乱子伦一区二区三区国色天香| 波多野结衣激情| 91综合精品国产丝袜长腿久久| 高清一区二区三区四区五区| 色综合成人av| 欧美色男人天堂| 亚洲综合网在线| va亚洲va日韩不卡在线观看| 日本黄网站免费| 97精品视频| 国产高清一区视频| 向日葵视频成人app网址| 色噜噜狠狠狠综合曰曰曰88av| 国产草草影院ccyycom| 亚洲不卡在线观看| 亚洲成人黄色av| 国产一区中文字幕| 91丨porny丨探花| 全球成人免费直播| 成人午夜电影在线播放| 精品成人av| 欧美日韩国产成人在线| 欧美日韩在线精品一区二区三区激情综 | 欧美一区二区三区播放老司机| 日韩激情一区二区三区| 国产日韩av一区二区| 992tv人人草| 性色一区二区| 欧美日韩午夜爽爽| 精品国产乱码久久久| 99免费在线观看视频| 神马久久资源| 久久久人成影片一区二区三区| 国产特黄在线| 精品国产免费久久| 亚洲一二区视频| 欧美日韩色婷婷| 欧美片一区二区| 中文字幕精品—区二区四季| 免费日本黄色网址| 国产精品一区在线观看你懂的| 黑森林福利视频导航| 欧美激情视频一区二区三区在线播放| 久久久精彩视频| 亚洲精品一二三**| 国产一区二区香蕉| 制服诱惑亚洲| 欧美在线亚洲一区| 97人人在线视频| 不卡av在线播放| 午夜看片在线免费| 国产亚洲欧美aaaa| 深夜福利视频一区| 亚洲第一网站免费视频| 国产三级三级在线观看| 金瓶狂野欧美性猛交xxxx| 亚洲一区二区在线免费观看视频| 91麻豆精品国产91久久综合| 99精品欧美一区| 午夜影院福利社| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲主播在线观看| 青青操在线视频观看| 国产喷白浆一区二区三区| 熟妇高潮精品一区二区三区| 成人网男人的天堂| 无码人妻丰满熟妇啪啪网站| 国产乱人伦偷精品视频不卡| 欧美激情第3页| 精品一区二区综合| www.99r| 麻豆精品一二三| 日本888xxxx| 免费成人小视频| 三级视频中文字幕| 精品一区二区综合| 色婷婷一区二区三区在线观看| 久久精品国产久精国产| 在线观看免费视频高清游戏推荐| 日韩成人一区二区三区在线观看| 成人精品小视频| 日韩高清一级片| 日日噜噜噜噜久久久精品毛片| 日韩精品电影一区亚洲| 欧美精品成人网| 日本三级亚洲精品| 手机免费看av网站| 国产福利精品导航| 在线免费看黄色片| 久久女同精品一区二区| 日本少妇xxxxx| 亚洲天天做日日做天天谢日日欢| 深夜福利影院在线观看| 一个色综合网站| 国产成人无码精品久在线观看| 精品久久久久久中文字幕大豆网 | 91传媒视频在线播放| 少妇一级淫片日本| 宅男在线国产精品| 性生交大片免费看女人按摩| 亚洲国产成人精品久久久国产成人一区| 污污网站在线免费观看| 国产午夜一区二区| av大全在线| 97视频免费观看| 少妇精品视频一区二区免费看| 国产中文日韩欧美| 国产区精品视频在线观看豆花| 欧美精品一区二区三区在线看午夜| 成人aaaa| 91.com在线| 日韩制服丝袜av| 中文字幕在线视频一区二区| 成人深夜在线观看| 韩国三级hd中文字幕| 亚洲男人的天堂网| 国产美女激情视频| 3d成人h动漫网站入口| 日批视频免费播放| 中日韩午夜理伦电影免费| 在线观看三级视频| 国产精品1234| 动漫av一区| 日韩一区免费观看| 欧美日韩hd| 国产综合免费视频| 国产精品91一区二区| 精品1卡二卡三卡四卡老狼| 欧美激情中文字幕| 国产在线视频卡一卡二| 欧美偷拍一区二区| 天堂av一区二区三区| 日韩视频中文字幕| av综合电影网站| 91视频99| 日韩黄色大片| 国产91对白刺激露脸在线观看| 激情欧美一区二区三区在线观看| 免费成人蒂法网站| 亚洲精品成人精品456| 真实新婚偷拍xxxxx| 日韩成人av在线播放| 香蕉久久aⅴ一区二区三区| 国产精品久久久久av免费| 国产成人av毛片| 色婷婷777777仙踪林| 日韩激情一区二区| 香港三级日本三级| 一区二区三区高清在线| 一区二区的视频| 在线视频免费一区二区| 中文字幕乱码在线播放| 国产欧美韩日| 欧美激情日韩| 亚洲欧美天堂在线| 国产精品无码永久免费888| 亚洲精品男人天堂| 亚洲精品成人网| 国模私拍视频在线播放| 91午夜理伦私人影院| 99久久国产综合精品成人影院| 好男人www社区| 久久久精品免费免费| 成人午夜视频精品一区| 亚洲精品一区二区三区99| 污片在线免费观看| 亚洲一区二区三区在线视频| 99久久99久久精品国产片桃花| 国产小视频精品| 国产欧美中文在线| 国产99免费视频| 一本色道久久88综合日韩精品| 中老年在线免费视频| 久精品国产欧美| 亚洲欧美久久久| 日本黄色网址大全| 欧美日韩在线视频观看| 十九岁完整版在线观看好看云免费| 午夜精品一区二区三区av| 都市激情亚洲欧美| 国产精品久久中文字幕| 99在线精品一区二区三区| 日操夜操天天操| 精品亚洲国产视频| 黑人巨大亚洲一区二区久 | 亚洲欧洲视频在线观看| 2019亚洲男人天堂| 国产欧美一区二区精品久久久| 欧美三级一级片| 久久综合九色综合欧美亚洲| 日本在线播放视频| 怡红院精品视频| 欧美黄页免费| 99久re热视频精品98| 国产超碰在线一区| 日日夜夜综合网| 国产香蕉精品视频一区二区三区| 69堂精品视频在线播放| 在线观看亚洲视频啊啊啊啊| 国产精品77777竹菊影视小说| 九九九国产视频| 亚洲人成自拍网站| 日韩伦理一区二区| 日韩精品一区二区在线视频| 91丨九色丨黑人外教| 毛片在线免费播放| 久久91精品国产91久久久| 精品自拍偷拍| 天天干天天综合| 亚洲在线视频网站| 九色国产在线观看| 91在线观看免费高清完整版在线观看| 亚洲午夜黄色| 91成人在线免费视频| 51精品久久久久久久蜜臀| h片在线观看视频免费免费| 欧美日韩在线观看一区| 国产一区91精品张津瑜| 日韩女同强女同hd| 久久久www成人免费精品张筱雨| 福利欧美精品在线| 欧美一级视频在线| 欧美性xxxxxxx| 羞羞视频在线观看不卡|