阿里P9封神之作!RocketMQ核心筆記瘋傳Ali內網。

消息隊列(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”即可獲取資料免費領取方式!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章