RocketMQ 介紹及核心概念

RocketMQ 是阿里巴巴開源的分布式消息中間件。

RocketMQ 特點

  • 是一個隊列模型的消息中間件,具有高性能、高可靠、高實時、分布式等特點
  • Producer、Consumer、隊列都可以分布式
  • Producer 向一些隊列輪流發(fā)送消息,隊列集合稱為 Topic,Consumer 如果做廣播消費,則一個 Consumer 實例消費這個 Topic 對應的所有隊列,如果做集群消費,則多個 Consumer 實例平均消費這個 Topic 對應的隊列集合
  • 能夠保證嚴格的消息順序
  • 支持拉(pull)和推(push)兩種消息模式
  • 高效的訂閱者水平擴展能力
  • 實時的消息訂閱機制
  • 億級消息堆積能力
  • 支持多種消息協(xié)議,如 JMS、OpenMessaging 等
  • 較少的依賴

RocketMQ 核心概念

  • Producer
    消息生產者,將業(yè)務系統(tǒng)生成的消息發(fā)送給消息代理(Broker),RocketMQ 提供了多種發(fā)送消息的模式:同步(synchronous)、異步(asynchronous)和單向(one-way)。

  • Producer Group
    消息生產者組,具有相同角色的消息生產者組合在一起,相同角色可以理解為生產同一類消息。

  • Consumer
    消息消費者,從消息代理(Broker)獲取消息并將其提供給應用程序。又可以根據消息獲取方式分為:
    (1) Pull Consumer
    積極主動地從消息代理(Broker)中拉取消息,一旦批量消息被拉出,用戶應用便啟動消息。
    (2) Push Consumer
    將拉動消息、消費進度和其它維護工作封裝起來,留下一個回調接口給最終用戶實現(xiàn),這個接口在消息到達時會被執(zhí)行。

  • Consumer Group
    消息消費者組,同消息生產者組類似,將具有相同角色的消息消費者組合在一起,相同角色可以理解為消費同一類消息。

  • Topic
    Topic 是消息的邏輯分類。

  • Message
    Message 是發(fā)送的信息載體,Message 必須指定 Topic,可以類比信件地址。Message 有一個可選的 Tag 設置便于過濾消息,還可以添加額外的鍵值對。

  • Message Queue
    Topic 會被分為一個或多個 Message Queue

  • Tag
    Tag 是 Topic 的進一步細分,為用戶提供額外的靈活性。同一業(yè)務不同目的的消息可以擁有相同的 Topic 和不同的 Tag。

  • Broker
    Broker 是 RocketMQ 系統(tǒng)主要組件,接收來自消息生產者的消息,存儲這些消息并為消息消費者拉動這些消息做準備,也存儲消息相關元數據。

  • Name Server
    Name Server 為消息生產者和消費者提供路由信息。

  • Message Model
    消息模型:集群(Clustering)和廣播(Broadcasting)

  • Message Order
    消息順序:順序(Orderly)和并發(fā)(Concurrently)

RocketMQ 架構

此圖來自:http://rocketmq.apache.org/docs/rmq-arc/

RocketMQ 架構圖中展示了四個集群:

  • NameServer 集群
    提供輕量級的服務發(fā)現(xiàn)及路由,每個 NameServer 記錄完整的路由信息,提供相應的讀寫服務,支持快速存儲擴展。有些其它開源中間件使用 ZooKeeper 實現(xiàn)服務發(fā)現(xiàn)及路由功能,如 Apache Kafka。
    NameServer是一個功能齊全的服務器,主要包含兩個功能:
    (1) Broker 管理,接收來自 Broker 集群的注冊請求,提供心跳機制檢測 Broker 是否存活
    (2) 路由管理,每個 NameServer 持有全部有關 Broker 集群和客戶端請求隊列的路由信息

  • Broker 集群
    通過提供輕量級的 Topic 和Queue 機制處理消息存儲。同時支持推(Push)和拉(Pull)兩種模型,包含容錯機制。提供強大的峰值填充和以原始時間順序累積數千億條消息的能力。此外還提供災難恢復,豐富的指標統(tǒng)計數據和警報機制,這些都是傳統(tǒng)的消息系統(tǒng)缺乏的。
    Broker 有幾個重要的子模塊:
    (1) 遠程處理模塊,Broker 入口,處理來自客戶端的請求
    (2) 客戶端管理,管理客戶端(包括消息生產者和消費者),維護消費者的主題訂閱
    (3) 存儲服務,提供在物理硬盤上存儲和查詢消息的簡單 API
    (4) HA 服務,提供主從 Broker 間數據同步
    (5) 索引服務,通過指定鍵為消息建立索引并提供快速消息查詢

  • Producer 集群
    消息生產者支持分布式部署,分布式生產者通過多種負載均衡模式向 Broker 集群發(fā)送消息。

  • Consumer 集群
    消息消費者也支持 Push 和 Pull 模型的分布式部署,還支持集群消費和消息廣播。提供了實時的消息訂閱機制,可以滿足大多數消費者的需求。

有關架構圖中集群間交互方式的說明:
(1) Broker Master 和 Broker Slave 是主從結構,會執(zhí)行數據同步 Data Sync
(2) 每個 Broker 與 NameServer 集群中所有節(jié)點建立長連接,定時注冊 Topic 信息到所有 NameServer
(3) Producer 與 NameServer 集群中的其中一個節(jié)點(隨機)建立長連接,定期從 NameServer 獲取 Topic 路由信息,并與提供 Topic 服務的 Broker Master 建立長連接,定時向 Broker 發(fā)送心跳
(4) Producer 只能將消息發(fā)送到 Broker Master,但是 Consumer 同時和提供 Topic 服務的 Master 和 Slave 建立長連接,既可以從 Master 訂閱消息,也可以從 Slave 訂閱消息。

有關 RocketMQ 的更多資料可以參看:
Apache RocketMQ
RocketMQ on Github
阿里中間件團隊博客之十分鐘入門 RocketMQ

下一篇:RocketMQ 安裝部署及運行

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容