消息隊列(RocketMQ )作爲高併發系統的核心組件之一,能夠幫助業務系統解構提升開發效率和系統穩定性。
RocketMQ 是一款分佈式、隊列模型的消息中間件,具有以下特點:
能夠保證嚴格的消息順序
提供豐富的消息拉取模式
高效的訂閱者水平擴展能力
實時的消息訂閱機制
億級消息堆積能力
選擇RocketMQ的理由:
強調集羣模式無單點,可擴展,任意一點高可用,水平擴展
海量數據的堆積能力,消息堆積後,寫入延遲低
支持上萬個隊列
消息失敗重試機制
消息可查詢
開源社區靈活
成熟度(支持阿里雙十一)
RocketMQ 核心的四大組件:Name Server、Broker、Producer、Consumer 每個組件都可以部署成集羣模式進行水平擴展。
如果搞懂這份RocketMQ實戰與原理解析,在簡歷上寫精通RocketMQ完全沒問題
由於篇幅原因,這份RocketMQ核心實戰原理解析已經被整理成了PDF文檔,有需要這份RocketMQ核心實戰原理解析完整文檔的麻煩轉發後私信回覆“666”即可獲取資料免費領取方式!
阿里、滴滴等資深專家對RocketMQ實戰與原理解析的評價
RocketMQ實戰目錄展示
RocketMQ實戰原理解析從入門到生產環境、分佈式消息列隊、可靠性、吞吐量、Apache中間件、NameServer源碼、主從同步,最後基於Netty的通信實現
1、快速入門
本篇幅可以讓你瞭解RocketMQ和分佈式消息隊列的功能,然後搭建好單機版的消息隊列,進而能夠發送並接收簡單的消息。
消息隊列功能介紹
RocketMQ簡介
快速上手RocketMQ
2、生產環境下的配置和使用
在生產環境中使用RocketMQ集羣需要比QuickStart部分了解更多的內容,本章節在機器角色、集羣配置和部署,以及集羣管理方面都做了介紹,用戶可以基於這些內容搭建起一個生成環境的RocketMQ消息隊列集羣,在數據量不大的非關鍵場景,可以通過這一章節快速上線。
RocketMQ各部分角色介紹
多機集羣配置和部署
發送、接收消息示例
常用管理命令
通過圖形界面管理集羣
3、用適合的方式發送和接收消息
對消息隊列使用者來說,Consumer和Producer是打交道最多的兩個類型。
本篇詳細介紹了兩種類型的Consumer和一種類型的Producer,用戶在使用的時候基於業務需求來選擇合適的類型。最後重點介紹了Offset和Log,瞭解Offset機制是正確使用RocketMQ的基礎,合理使用Log可以大幅提高開發、調試的效率。
不同類型的消費者
不同類型的生產者
如何存儲隊列位置信息
自定義日誌輸出
4、分佈式消息隊列的協調者
介紹了NameServer的功能,NameServer在RocketMQ集羣中扮演調度中心的角色。
各個Producer、Consumer 上報自己的狀態上去,同時從NameServer獲取其他角色的狀態信息。NameServer 的功能雖然非常重要,但是被設計得很輕量級,代碼量少並且幾乎無磁盤存儲,所有的功能都通過內存高效完成。
還介紹了底層的通信機制,RocketMQ基於Netty對底層通信做了很好的抽象,使得通信功能邏輯清晰,代碼簡單。
NameServer的功能
各個角色間的交互流程
底層通信機制
5、消息隊列的核心機制
介紹了RocketMQ消息隊列實現的難點及核心,即“隊列”本身的實現,基於磁盤做一個讀寫效率高的隊列並非易事,實現不好就會使磁盤操作成爲整個系統的瓶頸,無法提升系統的吞吐量。RocketMQ基於“順序寫”“隨機讀”的原則來設計,利用“零拷貝”技術,克服了磁盤操作的瓶頸。
另一個難點是爲了高可用性而設計的主從機制,數據被及時複製到多個機器,這樣當一臺機器出故障後,整體系統依然可用。這樣可靠性和性能能直接有個權衡,RocketMQ 把選擇權留給用戶,用戶根據具體的業務場景來選擇要更高的可靠性,還是要更高的效率。
消息存儲和發送
消息存儲結構
高可用性機制
同步刷盤和異步刷盤
同步複製和異步複製
6、可靠性優先的使用場景
本篇根據使用場景,討論如何“可靠”地收發消息。即在要求消息順序的場景下,如何既能併發執行,又能保證消息順序;然後分析可能的故障場景下,如何應對以保證不丟消息、 不中斷服務。RocketMQ 在設計上,有重試機制來保證消息不丟,造成的結果是可能存在消息重複,這一點需要用戶根據具體業務場景來處理。下一章將討論處理大數據量消息的方法。
順序消息
消息重複問題
動態增減機器
各種故障對消息的影響
消息優先級
7、吞吐量優先的使用場景
本篇重點關注性能,關注在大消息量的情況下,如何提高RocketMQ的吞吐量。首先介紹了消息過濾,在服務端進行消息過濾可以減少無效消息傳輸造成的帶寬浪費,Tag是最常用的一種高效過濾方式,此外還可以用SQL表達式、FilterServer來過濾消息。
另一個提高吞吐量的方法是增加集羣的機器數量,提高併發性,要根據實際場景增加Broker、Consumer 或Producer角色的機器數量。
在Broker端進行消息過濾
提高Consumer處理能力
Consumer的負載均衡
提高Producer的發送速度
系統性能調優的一般流程
由於篇幅原因,這份RocketMQ核心實戰原理解析已經被整理成了PDF文檔,有需要這份RocketMQ核心實戰原理解析完整文檔的麻煩轉發後私信回覆“666”即可獲取資料免費領取方式!
8、和其他系統交互
作爲一箇中間件產品,會比普通軟件更多地需要和其他系統打交道,本篇介紹瞭如何與SpringBoot、 Spark、 Flink等軟件進行交互。同時介紹了使用雲端的RocketMQ產品,以及自定義開發運維工具的方法。
在SpringBoot中使用RocketMQ
直接使用雲上RocketMQ
RocketMQ與Spark、Flink對接
自定義開發運維工具
9、首個Apache中間件頂級項目
RocketMQ是阿里最優秀的中間件之一,本篇介紹了RocketMQ的歷史,以及其目前作爲Apache頂級項目的現狀。
RocketMQ的前世今生
Apache頂級項目(TLP) 之路
源碼結構
不斷迭代的代碼
10、NameServer源碼解析
本篇分析了NameServer模塊的源碼,NameServer是--個功能重要但是代碼量不大的模塊,所以選擇這個模塊入手,比較容易理解。我們在分析源碼時,認真讀懂一個模塊後就可以對作者的代碼風格、設計偏好等有基本的瞭解。
模塊入口代碼的功能
NameServer的總控邏輯
核心業務邏輯處理
集羣狀態存儲
11、最常用的消費類
本篇分析的是Client模塊裏的代碼,我們在使用RocketMQ的時候,更多的是和這個模塊裏的代碼打交道。本章重點分析了DefaultMQPushConsumerImpl類,然後分析了Consumer的併發處理過程,最後分析了客戶端Class統一的底層通信類MQClientInstance。
整體流程
消息的併發處理.
生產者,消費者的底層類
12、主從同步機制
本篇分析了Master和Slave角色的Broker之間同步信息功能的實現。需要同步的信息分爲兩種類型,實現方式各不相同:一種是元數據信息,採用基於Netty的command方式來同步消息;另一種是commitLog信息,同步方式是直接基於JavaNIO來實現。
同步屬性信息
同步消息體
sync_ master 和async_master
13、基於Netty的通信實現
本篇介紹了RocketMQ底層通信的實現機制,由於它是基於Netty來實現的,所以首先介紹了Netty的基礎知識。Netty被用在很多開源軟件的底層通信部分,RocketMQ以Netty爲基礎,還實現了-種機制,把通信功能和消息處理功能分離,不同類型的通信內容被抽象成發送帶有對應類型代碼的Command,同時根據類型代碼查找對應的Processor和Executor來執行,結構非常清晰,爲我們自己實現網絡通信程序提供了參考。
Netty介紹
Netty架構總覽
Netty 用法示例
RocketMQ基於Netty的通信
由於篇幅原因,這份RocketMQ核心實戰原理解析已經被整理成了PDF文檔,有需要這份RocketMQ核心實戰原理解析完整文檔的麻煩轉發後私信回覆“666”即可獲取資料免費領取方式!