RocketMQ-架構(gòu)設(shè)計(jì)

RocketMQ-架構(gòu)設(shè)計(jì)


1 技術(shù)架構(gòu)

image.png

RocketMQ架構(gòu)上主要分為四部分彼水,如上圖所示:

  • Producer:消息發(fā)布的角色谷婆,支持分布式集群方式部署墓造。Producer通過MQ的負(fù)載均衡模塊選擇相應(yīng)的Broker集群隊(duì)列進(jìn)行消息投遞媒区,投遞的過程支持快速失敗并且低延遲。

  • Consumer:消息消費(fèi)的角色已脓,支持分布式集群方式部署声邦。支持以push推,pull拉兩種模式對消息進(jìn)行消費(fèi)摆舟。同時(shí)也支持集群方式和廣播方式的消費(fèi)亥曹,它提供實(shí)時(shí)消息訂閱機(jī)制,可以滿足大多數(shù)用戶的需求恨诱。

  • NameServer:NameServer是一個(gè)非常簡單的Topic路由注冊中心媳瞪,其角色類似Dubbo中的zookeeper,支持Broker的動態(tài)注冊與發(fā)現(xiàn)照宝。主要包括兩個(gè)功能:Broker管理蛇受,NameServer接受Broker集群的注冊信息并且保存下來作為路由信息的基本數(shù)據(jù)。然后提供心跳檢測機(jī)制厕鹃,檢查Broker是否還存活兢仰;路由信息管理,每個(gè)NameServer將保存關(guān)于Broker集群的整個(gè)路由信息和用于客戶端查詢的隊(duì)列信息剂碴。然后Producer和Conumser通過NameServer就可以知道整個(gè)Broker集群的路由信息把将,從而進(jìn)行消息的投遞和消費(fèi)。NameServer通常也是集群的方式部署忆矛,各實(shí)例間相互不進(jìn)行信息通訊察蹲。Broker是向每一臺NameServer注冊自己的路由信息,所以每一個(gè)NameServer實(shí)例上面都保存一份完整的路由信息洽议。當(dāng)某個(gè)NameServer因某種原因下線了,Broker仍然可以向其它NameServer同步其路由信息亚兄,Producer,Consumer仍然可以動態(tài)感知Broker的路由的信息。

  • BrokerServer:Broker主要負(fù)責(zé)消息的存儲审胚、投遞和查詢以及服務(wù)高可用保證匈勋,為了實(shí)現(xiàn)這些功能,Broker包含了以下幾個(gè)重要子模塊菲盾。

    1. Remoting Module:整個(gè)Broker的實(shí)體颓影,負(fù)責(zé)處理來自clients端的請求懒鉴。
    2. Client Manager:負(fù)責(zé)管理客戶端(Producer/Consumer)和維護(hù)Consumer的Topic訂閱信息
    3. Store Service:提供方便簡單的API接口處理消息存儲到物理硬盤和查詢功能碎浇。
    4. HA Service:高可用服務(wù)临谱,提供Master Broker 和 Slave Broker之間的數(shù)據(jù)同步功能。
    5. Index Service:根據(jù)特定的Message key對投遞到Broker的消息進(jìn)行索引服務(wù)奴璃,以提供消息的快速查詢悉默。
image.png

2 部署架構(gòu)

image.png

RocketMQ 網(wǎng)絡(luò)部署特點(diǎn)

  • NameServer是一個(gè)幾乎無狀態(tài)節(jié)點(diǎn)苟穆,可集群部署,節(jié)點(diǎn)之間無任何信息同步雳旅。

  • Broker部署相對復(fù)雜,Broker分為Master與Slave攒盈,一個(gè)Master可以對應(yīng)多個(gè)Slave,但是一個(gè)Slave只能對應(yīng)一個(gè)Master型豁,Master與Slave 的對應(yīng)關(guān)系通過指定相同的BrokerName,不同的BrokerId 來定義迎变,BrokerId為0表示Master,非0表示Slave衣形。Master也可以部署多個(gè)。每個(gè)Broker與NameServer集群中的所有節(jié)點(diǎn)建立長連接泵喘,定時(shí)注冊Topic信息到所有NameServer。 注意:當(dāng)前RocketMQ版本在部署架構(gòu)上支持一Master多Slave纪铺,但只有BrokerId=1的從服務(wù)器才會參與消息的讀負(fù)載。

  • Producer與NameServer集群中的其中一個(gè)節(jié)點(diǎn)(隨機(jī)選擇)建立長連接突诬,定期從NameServer獲取Topic路由信息苫拍,并向提供Topic 服務(wù)的Master建立長連接旺隙,且定時(shí)向Master發(fā)送心跳。Producer完全無狀態(tài)蔬捷,可集群部署。

  • Consumer與NameServer集群中的其中一個(gè)節(jié)點(diǎn)(隨機(jī)選擇)建立長連接周拐,定期從NameServer獲取Topic路由信息,并向提供Topic服務(wù)的Master妥粟、Slave建立長連接,且定時(shí)向Master滩报、Slave發(fā)送心跳。Consumer既可以從Master訂閱消息脓钾,也可以從Slave訂閱消息,消費(fèi)者在向Master拉取消息時(shí)惭笑,Master服務(wù)器會根據(jù)拉取偏移量與最大偏移量的距離(判斷是否讀老消息生真,產(chǎn)生讀I/O)沉噩,以及從服務(wù)器是否可讀等因素建議下一次是從Master還是Slave拉取柱蟀。

結(jié)合部署架構(gòu)圖川蒙,描述集群工作流程:

  • 啟動NameServer长已,NameServer起來后監(jiān)聽端口,等待Broker术瓮、Producer、Consumer連上來胞四,相當(dāng)于一個(gè)路由控制中心。
  • Broker啟動辜伟,跟所有的NameServer保持長連接脊另,定時(shí)發(fā)送心跳包。心跳包中包含當(dāng)前Broker信息(IP+端口等)以及存儲所有Topic信息约巷。注冊成功后偎痛,NameServer集群中就有Topic跟Broker的映射關(guān)系。
  • 收發(fā)消息前独郎,先創(chuàng)建Topic,創(chuàng)建Topic時(shí)需要指定該Topic要存儲在哪些Broker上囚聚,也可以在發(fā)送消息時(shí)自動創(chuàng)建Topic标锄。
  • Producer發(fā)送消息,啟動時(shí)先跟NameServer集群中的其中一臺建立長連接料皇,并從NameServer中獲取當(dāng)前發(fā)送的Topic存在哪些Broker上,輪詢從隊(duì)列列表中選擇一個(gè)隊(duì)列鬼譬,然后與隊(duì)列所在的Broker建立長連接從而向Broker發(fā)消息逊脯。
  • Consumer跟Producer類似优质,跟其中一臺NameServer建立長連接军洼,獲取當(dāng)前訂閱Topic存在哪些Broker上,然后直接跟Broker建立連接通道匕争,開始消費(fèi)消息。

參考官網(wǎng):https://github.com/apache/rocketmq/blob/master/docs/cn/architecture.md

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拍皮,一起剝皮案震驚了整個(gè)濱河市跑杭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌德谅,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宅荤,死亡現(xiàn)場離奇詭異屑迂,居然都是意外死亡冯键,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門手报,熙熙樓的掌柜王于貴愁眉苦臉地迎上來改化,“玉大人掩蛤,你說我怎么就攤上這事陈肛。” “怎么了句旱?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵谈撒,是天一觀的道長腥泥。 經(jīng)常有香客問我啃匿,道長,這世上最難降的妖魔是什么溯乒? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮尊流,結(jié)果婚禮上灯帮,老公的妹妹穿的比我還像新娘崖技。我一直安慰自己钟哥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布腻贰。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪伴奥。 梳的紋絲不亂的頭發(fā)上翼闽,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音感局,去河邊找鬼。 笑死询微,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的撑毛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼寺惫,長吁一口氣:“原來是場噩夢啊……” “哼蹦疑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起歉摧,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤腔呜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后核畴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡跟束,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年丑孩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冀宴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片温学。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖逃延,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情揽祥,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布盔然,位于F島的核電站,受9級特大地震影響挺尾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜遭铺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一恢准、第九天 我趴在偏房一處隱蔽的房頂上張望魂挂。 院中可真熱鬧馁筐,春花似錦、人聲如沸敏沉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迫皱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卓起,已是汗流浹背赵辕。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留还惠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像衰粹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子铝耻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容