RocketMQ學習筆記【二】RocketMQ架構簡介

二、RocketMQ架構

 

                                                                                     圖片來自官網

       如上圖所示:Apache RocketMQ是一個分佈式消息和流媒體平臺,具有低延遲、高性能和可靠性、萬億級容量和靈活的可擴展性。它由四個部分組成:NameSever(名稱服務器)、Broker(代理)、Producer(生產者)和Consumer消費者。它們中的每一個都可以水平擴展,以避免單節點部署帶來的單點故障服務不可用問題。這裏還可以看到在Broker集羣採用的是Master/Slave架構,這種架構跟Kafka中Broker Cluster的Leader/Follower架構是有很大不同的,Kafka中的Leader和Follower更像是邏輯概念(每個Broker是消息A的Leader同時又是消息B的Follower),而RocketMQ中的Master和Slave是區分明確的,當一個Master掛了之後,你可以寫到其他Master上,但不會把Slave切換成Master。所以Kakfa裏面Leader掛掉之後有選舉的Leader的過程(依賴Zookeeper實現,把一個Follower升級成Leader),而Rocket MQ是不需要的。

2.1 NameServer Cluster

       NameServer Cluster提供輕量級服務發現和路由。每個NameServer記錄完整的路由信息,是一個幾乎無狀態節點,支持快速的存儲擴展,可集羣部署,主要包括兩個功能:

(1)Broker管理:NameSever接受Broker集羣的註冊信息,並提供心跳機制來檢查某個Broker是否仍存活。

(2)路由管理:每個NameServer將保存有關Broker集羣的完整路由信息和用於Client端查詢的Queue信息。

       正如我們所知,RocketMQ 客戶端集羣(生產者/消費者)將從NameServer查詢Queue隊列路由信息,但是Client如何找到NameServer的地址呢?

向Client集羣提供名稱服務器地址列表有四種方法:

(1)編程方式,如producer.setnamesrvaddr(“ip:port”)。

(2)Java選項,使用RokMeq.NAMESRV.ADDR。

(3)環境變量,使用名稱srv_addr。

(4)HTTP端點。

以上四種方式具體實現細節:http://rocketmq.apache.org/rocketmq/four-methods-to-feed-name-server-address-list/

2.2 Broker Cluster

       Brokers集羣通過提供輕量級的Topic(主題)和Queue(隊列)來處理消息存儲。它們支持Push/Pull模型,包含容錯機制(2個副本或3個副本),並提供按原始時間順序存儲數千億條峯值消息的容量。此外,Broker還提供災備恢復、豐富的統計數據和告警機制等功能,這些都是傳統消息中間件所缺少的。Broker是消息中轉角色,負責存儲消息,轉發消息。分爲 Master Broker 和 Slave Broker,一個 Master Broker 可以對應多個 Slave Broker,但是一個 Slave Broker 只能對應一個 Master Broker。Broker 啓動後需要完成一次將自己註冊至 Name Server 的操作。

       Broker負責消息存儲和傳遞、消息查詢、HA保證(HA guarantee)等。

如下圖所示,Broker服務器有幾個重要的子模塊:

(1)遠程處理模塊:是Broker的入口,處理來自Client端的請求。

(2)Client管理模塊,管理Client(生產者/消費者)並維護Comsumer和Topic 的訂閱關係。

(3)存儲服務,提供簡單的API來存儲或查詢物理磁盤中的消息。

(4)HA服務,在Master Broker和Slave Broker之間提供數據同步功能。

(5)索引服務,通過指定的鍵爲消息建立索引,並提供快速消息查詢。

2.3 Producer Cluster

       Producer(生產者)支持分佈式部署。生產者集羣通過多種負載平衡模式向Broker 集羣發送消息。發送消息支持快速失敗同時保持低延遲。Producer與 Name Server 集羣中的其中一個節點(隨機)建立長鏈接(Keep-alive),定期從 Name Server 讀取 Topic 路由信息,並向提供 Topic 服務的 Master Broker 建立長鏈接,且定時向 Master Broker 發送心跳。

2.4 Consumer Cluster

       Consumer(消費者)也支持分佈式部署,支持Pull/Push兩種消息消費模式。它還支持集羣消費和消息廣播。它提供了實時消息訂閱機制,可以滿足大多數用戶的需求。RocketMQ的網站爲感興趣的用戶提供了一個簡單的快速入門指南。Consumer 與 Name Server 集羣中的其中一個節點(隨機)建立長連接,定期從 Name Server 拉取 Topic 路由信息,並向提供 Topic 服務的 Master Broker、Slave Broker 建立長連接,且定時向 Master Broker、Slave Broker 發送心跳。Consumer 既可以從 Master Broker 訂閱消息,也可以從 Slave Broker 訂閱消息,訂閱規則由 Broker 配置決定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章