RocketMQ是一個來自阿里巴巴的分佈式消息中間件,於2012年開源,並在2017年正式成為Apache頂級項目。據瞭解,包括阿里雲上的消息產品以及收購的子公司在內,阿里集團的消息產品全線都運行在RocketMQ之上,並且最近幾年的雙十一大促中,RocketMQ都有搶眼表現。
談起消息系統中間件,就開源項目而言,戶的選擇其實很多,包括ActiveMQ、ZeroMQ、Kafka等。那到底RocketMQ又有什麼優勢?
Apache Kafka為日誌處理而生,目前從社區來看,發力重點在流計算,IoT等領域,和Apache Spark Streaming,Apache Flink,Apache Storm等一站式流計算平臺不同,它從Apache Samza這種輕量級方案汲取了養分,提供給用戶的是一個異步編程框架, 用戶基於類庫編程,不需要考慮分發,部署,調度等一系列傳統流計算框架帶來的繁瑣工作。這種輕量級的解決方案在一些日誌處理, ETL等場景更受大家歡迎。
如果是應對一些高併發,可靠以及可比較苛刻的場景,Apache RocketMQ是一個不錯的選擇。最近留意到一個有趣的現象,國內一些中大型規模的公司普遍部署了兩套消息引擎,一套選擇 Apache RocketMQ髒交易,數據分發等核心鏈路上,一套選擇Apache Kafka髒大數據等在線、離線分析鏈路上。無疑問,Kafka 目前在大數據生態建設這塊,確實具備定的先發優勢。
RocketMQ作為承載了阿里巴巴雙十一萬億級數據體量的消息引擎,在電商,金融領域的優勢也是比較明顯的。目前,國內很多金融領域的領軍企業在構建自己的分佈式金融體系時,也都不約而同地選擇了RocketMQ。
本學習文檔可以學習到:
- 產品發展歷史
- 專業術語
- 消息中間件需要解決那些問題
- RocketMQ Overview
- RocketMQ 存儲特點
- RocketMQ 關鍵特性
- RocketMQ 消息過濾
- RocketMQ 通信組件
- RocketMQ 服務發現(Name Server)
一、前言
本學習文檔旨在描述 RocketMQ 的多個關鍵特性的實現原理,並對消息中間件遇到的各種問題進行總結,闡述RocketMQ 如何解決這些問題。文中主要引用了 JMS 規範與 CORBA Notification 規範,規範為我們設計系統指明瞭方向,但是仍有不少問題規範沒有提及,對於消息中間件又至關重要。RocketMQ 並不遵循任何規範,但是參考了各種規範與同類產品的設計思想。
二、產品發展歷史
- Metaq(Metamorphosis) 1.x
- Metaq 2.x
- RocketMQ 3.x
三、專業術語
- Producer
- Consumer
- Push Consumer
- Pull Consumer
- Producer Group
- Consumer Group
- Broker
- 廣播消費
- 集群消費
- 順序消息
- 普通順序消息
- 嚴格順序消息
- Message Queue
四、消息中間件需要解決那些問題
本節闡述消息中間件通常需要解決哪些問題,在解決這些問題當中會遇到什麼困難,RocketMQ 是否可以解決,規範中如何定義這些問題。
- Publish/Subscribe
- Message Priority
- Message Order
- Message Filter
- Message Persistence
- Message Reliabilty
- Low Latency Messaging
- At least Once
- Exactly Only Once
- Broker的Buffer滿了怎麼辦?
- 回溯消費
- 消息堆積
- 分佈式事務
- 定時消息
- 消息重試
五、RocketMQ Overview
- RocketMQ是什麼?
- RocketMQ物理部署結構
- RocketMQ邏輯部署結構
六、RocketMQ 存儲特點
- 零拷貝原理
- 文件系統
- 數據存儲結構
- 存儲目錄結構
- 數據可靠性
七、RocketMQ 關鍵特性
- 單機支持1萬以上持久化序列
- 刷盤策略
- 消息查詢
- 服務器消息過濾
- 長輪詢 Pull
- 順序消息
- 事務消息
- 發送消息負載均衡
- 訂閱消息負載均衡
- 單隊列並行消費
- 發送定時消息
- 消息消費失敗,定時重試
- HA,同步雙鞋/異步複製
- 單個JVM進程也能利用機器超大內存
- 消息堆積問題解決辦法
八、RocketMQ 消息過濾
- 簡單消息過濾
- 高級消息過濾
九、RocketMQ 通信組件
- 網絡協議
- 心跳處理
- 連接複用
- 超時連接
寫在最後
在分佈式系統中,RocketMQ中間件是非常重要的組成,具有較高的技術門檻。同時,中間件相關的開源軟件眾多,適用場景各異,學習不易,
對於初學者,或者正在學習RocketMQ的朋友可以來@Java架構師丨蘇先生私信【中間件】即可獲取以上所有的學習資料的免費領取方式。冰凍三尺非一日之寒,掌握一門技術也不是一天兩天的事情,重在堅持,程序員,加油!