Apache RocketMQ
RocketMQ[2]是一個分佈式消息和流數據平台,具有低延遲、高性能、高可靠性、萬億級容量和靈活的可擴展性。RocketMQ是2012年阿里巴巴開源的第三代分佈式消息中間件,2016年11月21日,阿里巴巴向Apache軟件基金會捐贈了RocketMQ;第二年2月20日,Apache軟件基金會宣佈Apache RocketMQ成為頂級項目。
開發者 | Apache軟件基金會 |
---|---|
首次發佈 | 2012年 |
當前版本 |
|
原始碼庫 | |
程式語言 | Java |
作業系統 | 跨平台 |
類型 | 流處理, 消息代理 |
許可協議 | Apache許可證 2.0 |
網站 | rocketmq |
歷史
RocketMQ的發展可分為三個階段。[3]
第一代在數據傳輸中使用push模式,在數據存儲中使用關係型數據庫。它展現了消息傳遞的低延遲,並且滿足了具有分佈式事務的典型電子商務平台[4] 的用途。
第二代在數據傳輸中使用pull模式,在數據存儲中使用文件系統。它更注重穩定性和可靠性,並顯示出與第一代響應時間和Kafka日誌收集相當的性能。
第三代將pull模式與一些push操作相結合。它繼承了第一代和第二代的優點,並在並發性和大量數據場景中表現出高性能。
功能
各種消息傳遞解決方案之間已經進行了很多比較,眾所周知,當主題數量急劇增加時,RocketMQ的吞吐量下降幅度遠小於Kafka。[5]由於具有高性能、高可靠性和高實時性的特點,RocketMQ與其他協議組件在MQTT等各種消息場景中的結合也越來越多。[6]
客戶端SDK | 協議和規範 | 有序消息 | 計劃消息 | 批量消息 | 廣播消息 | 消息過濾器 |
---|---|---|---|---|---|---|
Java,C++,Python,Go,Node.Js | Pull模式,支持TCP,JMS,OpenMessaging | 確保嚴格的消息排序,並可以優雅地擴展 | 支持 | 支持同步模式以避免的消息損失 | 支持 | 支持基於SQL92的屬性過濾器表達式 |
伺服器觸發的重傳遞 | 消息儲存 | 消息追溯 | 消息優先權 | 高可用性和故障轉移 | 消息跟蹤 | 配置 |
支持 | 高性能和低延遲的文件存儲 | 支持時間戳和偏移量兩種表示 | 不支持 | 支持Master-Slave模型,不需要其他組件 | 支持 | 開箱即用,用戶只需要注意幾個配置 |
架構
RocketMQ由四部分組成:命名伺服器(Name Server)、代理(Broker)、生產者(Producer)和消費者(Consumer),其中每一個都可以水平擴展而沒有單點故障,如上圖所示。
命名伺服器集群
命名伺服器集群是用於服務發現的輕量級組件,它們可用於讀取和寫入路由信息。每個命名伺服器可以記錄全局信息,並支持快速存儲擴展。
代理集群
代理集群使用輕量級主題(topic)和隊列(queue)機制來管理數據存儲。為了實現容錯,代理提供2份或3份數據。客戶端可以在Push和Pull模型中獲取消息。此外,還支持災難恢復和豐富的指標統計信息。
生產者集群
生產者(Producer)可以分佈式部署,從生產者到代理的消息可以通過多路徑進行平衡。此外,還支持快速故障恢復和低延遲。
消費者集群
消費者也可以在Push和Pull模型中進行分佈式部署,他們可以實時訂閱消息,以集群為單位消費消息,同時還支持消息廣播。
應用
Apache RocketMQ至少可以應用到以下五個方面:
- 異構系統的集成;
- 應用程式之間的分離;
- 在事件驅動機制和複雜事件架構模型中的骨幹;
- 數據複製渠道;
- 與流計算引擎集成。
社區維護
RocketMQ團隊為活躍社區做了很多工作。聚會、研討會、ApacheCon和Code Marathon定期在北京、深圳、杭州等地舉行,以吸引新的貢獻者和提交者。OpenMessaging基準測試套件目前可用於RocketMQ,它使RocketMQ與分佈式消息傳遞的全球標準保持同步。[7]對於版本管理,採用了一系列標準化的軟件開發過程。最新版本是4.2.0,4.3.0即將推出。可在此處(頁面存檔備份,存於互聯網檔案館)獲取更多信息。
獲獎
2016年度最受歡迎中國開源軟件獎(頁面存檔備份,存於互聯網檔案館)
2017年度最受歡迎中國開源軟件獎(頁面存檔備份,存於互聯網檔案館)
參見
參考文獻
- ^ Release 5.1.0. 2023年2月20日 [2023年3月8日].
- ^ apache/rocketmq. GitHub. [2018-05-25]. (原始內容存檔於2019-08-01) (英語).
- ^ From Alibaba to Apache: RocketMQ’s Past, Present, and Future. InfoQ. [2018-06-26]. (原始內容存檔於2018-06-19).
- ^ Toward a General Distributed Messaging Framework for Online Transaction Processing Applications - IEEE Journals & Magazine. ieeexplore.ieee.org. [2018-06-26]. (原始內容存檔於2018-06-26) (美國英語).
- ^ Cloud, Alibaba. Kafka vs. RocketMQ- Multiple Topic Stress Test Results. Medium. 2018-01-04 [2018-07-08]. (原始內容存檔於2018-07-08).
- ^ A MQTT Protocol Message Push Server Based on RocketMQ - IEEE Conference Publication. ieeexplore.ieee.org. [2018-06-26]. (原始內容存檔於2018-06-19) (美國英語).
- ^ The OpenMessaging Benchmark Framework. openmessaging.cloud. [2018-07-08]. (原始內容存檔於2018-06-25).
外部連結
- Apache RocketMQ網站(頁面存檔備份,存於互聯網檔案館)
- Apache RocketMQ Externals(頁面存檔備份,存於互聯網檔案館)
- 基於RocketMQ的MQTT協議消息推送伺服器(頁面存檔備份,存於互聯網檔案館)