消息中間件:談一談 RocketMQ 的技術(shù)架構(gòu)
作者:技術(shù)大咖秀
RocketMQ 自阿里開源以來,在 Apache 下的孵化還不錯(cuò),現(xiàn)在很多互聯(lián)網(wǎng)公司都在生產(chǎn)環(huán)境下使用。當(dāng)然也是各大技術(shù)廠商的面試要點(diǎn)。
RocketMQ 自阿里開源以來,在 Apache 下的孵化還不錯(cuò),現(xiàn)在很多互聯(lián)網(wǎng)公司都在生產(chǎn)環(huán)境下使用。當(dāng)然也是各大技術(shù)廠商的面試要點(diǎn)。
技術(shù)架構(gòu)

RocketMQ架構(gòu)上主要分為四部分,如上圖所示:
- Producer:消息發(fā)布的角色,支持分布式集群方式部署。Producer通過MQ的負(fù)載均衡模塊選擇相應(yīng)的Broker集群隊(duì)列進(jìn)行消息投遞,投遞的過程支持快速失敗并且低延遲。
- Consumer:消息消費(fèi)的角色,支持分布式集群方式部署。支持以push推,pull拉兩種模式對(duì)消息進(jìn)行消費(fèi)。同時(shí)也支持集群方式和廣播方式的消費(fèi),它提供實(shí)時(shí)消息訂閱機(jī)制,可以滿足大多數(shù)用戶的需求。
- NameServer:NameServer是一個(gè)非常簡單的Topic路由注冊中心,其角色類似Dubbo中的zookeeper,支持Broker的動(dòng)態(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是向每一臺(tái)NameServer注冊自己的路由信息,所以每一個(gè)NameServer實(shí)例上面都保存一份完整的路由信息。當(dāng)某個(gè)NameServer因某種原因下線了,Broker仍然可以向其它NameServer同步其路由信息,Producer,Consumer仍然可以動(dòng)態(tài)感知Broker的路由的信息。
- BrokerServer:Broker主要負(fù)責(zé)消息的存儲(chǔ)、投遞和查詢以及服務(wù)高可用保證。
其中Broker,為了實(shí)現(xiàn)這些功能,包含了以下幾個(gè)重要子模塊。

- Remoting Module:整個(gè)Broker的實(shí)體,負(fù)責(zé)處理來自clients端的請求。
- Client Manager:負(fù)責(zé)管理客戶端(Producer/Consumer)和維護(hù)Consumer的Topic訂閱信息
- Store Service:提供方便簡單的API接口處理消息存儲(chǔ)到物理硬盤和查詢功能。
- HA Service:高可用服務(wù),提供Master Broker 和 Slave Broker之間的數(shù)據(jù)同步功能。
- Index Service:根據(jù)特定的Message key對(duì)投遞到Broker的消息進(jìn)行索引服務(wù),以提供消息的快速查詢。
責(zé)任編輯:武曉燕
來源:
今日頭條