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

RocketMQ架構(gòu)上主要分為四部分,如上圖所示:
- Producer:消息發(fā)布的角色,支持分布式集群方式部署。Producer通過MQ的負(fù)載均衡模塊選擇相應(yīng)的Broker集群隊列進(jìn)行消息投遞,投遞的過程支持快速失敗并且低延遲。
- Consumer:消息消費的角色,支持分布式集群方式部署。支持以push推,pull拉兩種模式對消息進(jìn)行消費。同時也支持集群方式和廣播方式的消費,它提供實時消息訂閱機(jī)制,可以滿足大多數(shù)用戶的需求。
- NameServer:NameServer是一個非常簡單的Topic路由注冊中心,其角色類似Dubbo中的zookeeper,支持Broker的動態(tài)注冊與發(fā)現(xiàn)。主要包括兩個功能:Broker管理,NameServer接受Broker集群的注冊信息并且保存下來作為路由信息的基本數(shù)據(jù)。然后提供心跳檢測機(jī)制,檢查Broker是否還存活;路由信息管理,每個NameServer將保存關(guān)于Broker集群的整個路由信息和用于客戶端查詢的隊列信息。然后Producer和Conumser通過NameServer就可以知道整個Broker集群的路由信息,從而進(jìn)行消息的投遞和消費。NameServer通常也是集群的方式部署,各實例間相互不進(jìn)行信息通訊。Broker是向每一臺NameServer注冊自己的路由信息,所以每一個NameServer實例上面都保存一份完整的路由信息。當(dāng)某個NameServer因某種原因下線了,Broker仍然可以向其它NameServer同步其路由信息,Producer,Consumer仍然可以動態(tài)感知Broker的路由的信息。
- BrokerServer:Broker主要負(fù)責(zé)消息的存儲、投遞和查詢以及服務(wù)高可用保證。
其中Broker,為了實現(xiàn)這些功能,包含了以下幾個重要子模塊。

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