![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL4ImNhdjNzYWM1cjM5YmYidjMzMTYlBDN4ITN0YDOiljY1EGN5ADZw8CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
概述
RocketMQ是一個分布式消息和流處理平台,具有低延遲、高性能和高可靠、萬億級容量和靈活的可擴充性。它由四部分組成:name servers,brokers,生産者和消費者。它們中的每一個都可以水準擴充,而沒有單一的故障節點。
NameServer 叢集
Name Servers提供了輕量級的服務發現和路由。每個Name Server記錄全部的路由資訊,提供相應的讀和寫服務,并支援快速存儲擴充。
Broker 叢集
Brokers通過輕量級的TOPIC和QUEUE機制處理消息存儲。支援Push和Pull模式,包含故障容忍機制(2或3份),提供強大的峰值填充和以原始時間順序累積千億條消息的能力。
另外,Brokers提供災難恢複,豐富的度量統計和警告機制,這些都是傳統消息系統缺少的。
生産者叢集
生産者支援分布式部署。分布式生産者通過多種負載均衡模式發送消息到Broker叢集,發送過程支援快速故障并具有低延遲。
消費者叢集
消費者也支援以Push和Pull模式的分布式部署。
它也支援分布式消費和消息廣播。
它提供實時消息訂閱機制,可以滿足大部分消費者的需求。
NameServer
NameServer is a fully functional server, which mainly includes two features:
- Broker 管理,NameServer 接收來自Broker叢集的注冊,提供心跳機制來檢測broker是否存活。
- 路由管理,每個NameServer都持有有關broker叢集的整個路由資訊和用戶端查詢的隊列資訊。
我們都指定,RocketMQ用戶端(生産者/消費組)通過NameServer查詢隊列資訊,但用戶端怎麼查找NameServer 位址呢?
将用戶端位址清單加入NameServer有四種方式:
- 編碼方式,如producer.setNamesrvAddr("ip:port")。
- Java選項, 使用 rocketmq.namesrv.addr.
- 環境變量, 使用 NAMESRV_ADDR.
- HTTP Endpoint.
Broker Server
Broker服務 負責消息存儲和傳遞,消息查詢,保證HA等。
Broker 服務有些重要的子子產品:
- 遠端處理子產品,broker的入口,處理來自用戶端的請求。
- 用戶端管理器,管理用戶端(生産者/消費者),維護消費組的訂閱主題。
- 存儲服務,提供簡單的APIs來存儲或查詢實體磁盤中的消息。
- HA 服務, 提供主broker和從broker的資料同步
- 索引服務, 通過指定鍵建立消息索引,提供快速的消息查詢。