天天看點

RocketMQ架構

RocketMQ架構

概述

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等。

RocketMQ架構

Broker 服務有些重要的子子產品:

  • 遠端處理子產品,broker的入口,處理來自用戶端的請求。
  • 用戶端管理器,管理用戶端(生産者/消費者),維護消費組的訂閱主題。
  • 存儲服務,提供簡單的APIs來存儲或查詢實體磁盤中的消息。
  • HA 服務, 提供主broker和從broker的資料同步
  • 索引服務, 通過指定鍵建立消息索引,提供快速的消息查詢。