RocketMQ 5.0 vs 4.9.X 圖解架構對比

2023-02-27 12:01:54

本文作者:李偉,Apache RocketMQ Committer,RocketMQ Python使用者端專案Owner ,Apache Doris Contributor,騰訊雲資料庫開發工程師。

01 RocketMQ 4.9.X架構

在4.9.X中每個元件和元件之間的通訊簡單說明如下:

元件和資料流 說明
Namesrv 無狀態服務,儲存Topic路由資訊Topic路由=topic-queue-broker
Broker 有狀態服務,處理計算和儲存。計算 = 生產者請求,消費者請求,管理請求,Broker系統服務(比如索引構建服務,訊息過期服務)儲存  = 訊息儲存,索引儲存
Broker -> Namesrv Broker定期把Broker資訊+當前Broker中的Topic資訊上報Namesrv
生產者 生產訊息
生產者<-> Namesrv 生產者從Namesrv獲取Topic路由資訊, 包含Broker IP
生產者<-> Broker 生產者通過Topic路由資訊,把訊息直接傳送給Broker生產者定期和Broker心跳,上報當前生產者範例資訊
消費者 消費訊息
消費者<-> Namesrv 消費者從Namesrv獲取Topic路由資訊, 包含Broker IP
消費者 <-> Broker 消費者通過Topic路由資訊,從指定Broker中拉取訊息消費消費者定期和Broker心跳,上報當前消費者範例資訊

1、生產者通過Topic路由資訊,把訊息直接傳送給Broker。

2、生產者定期和Broker心跳,上報當前生產者範例資訊。

消費者消費訊息消費者<-> Namesrv

1、消費者從Namesrv獲取Topic路由資訊, 包含

Broker IP消費者 <-> Broker 。

  • 消費者通過Topic路由資訊,從指定Broker中拉取訊息消費。
  • 消費者定期和Broker心跳,上報當前消費者範例資訊。

02 RocketMQ 5.0.0 架構

在5.0.0 中每個元件和元件之間的通訊簡單說明如下:

元件和資料流 說明
Namesrv 無狀態服務,儲存Topic路由資訊Topic路由=topic-queue-broker。在5.0.0時,Namesrv程序中可以嵌入Controller模組。若設定enableControllerInNamesrv=true,在Namesrv程序中嵌入啟動一個Controller範例
Broker 有狀態服務,處理計算和儲存。計算 = 生產者請求,消費者請求,管理請求,Broker系統服務(比如索引構建服務,訊息過期服務)儲存  = 訊息儲存,索引儲存在5.0.0時, Broker支援主從切換,Broker的角色包含:master,slave,learner。若設定asyncLearner=true,則Broker為learner,只同步資料, 不參與選舉master
Broker -> Namesrv Broker定期把Broker資訊+當前Broker中的Topic資訊上報Namesrv
Remoting生產者 生產訊息
Remoting生產者<-> Namesrv 生產者從Namesrv獲取Topic路由資訊, 包含Broker IP
Remoting生產者<-> Broker 產者通過Topic路由資訊,把訊息直接傳送給Broker生產者定期和Broker心跳,上報當前生產者範例資訊
Remoting消費者 消費訊息
Remoting消費者<-> Namesrv 消費者從Namesrv獲取Topic路由資訊, 包含Broker IP
Remoting消費者 <-> Broker 消費者通過Topic路由資訊,從指定Broker中拉取訊息消費消費者定期和Broker心跳,上報當前消費者範例資訊
5.0.0新增模組Controller(控制器) 和Kafka Controller類似,在RocketMQ中負責Broker Master的選舉和通知Broker
5.0.0新增模組Broker <-> Controller Broker定期把Broker資訊上報ControllerBroker同步副本狀態Controller選舉新的Broker Master後,通知全部Broker
5.0.0新增模組Proxy 無狀態服務,新使用者端通過Grpc介面存取Proxy進行收發訊息。社群已支援Remoting協定。Proxy中支援嵌入Broker。若設定proxyMode=LOCAL,則會在Proxy程序中啟動一個Broker範例
5.0.0新增模組Proxy <-> Broker Proxy通過Remoting協定和Broker通訊,可以把Proxy當作一個Remoting的Client
5.0.0新增模組新 Client 新使用者端,支援生產、消費、管理功能。目前支援Grpc協定
5.0.0新增模組新Client <-> Proxy 新使用者端存取Proxy進行收發訊息,管理

1、生產者通過Topic路由資訊,把訊息直接傳送給Broker。

2、生產者定期和Broker心跳,上報當前生產者範例資訊。

Remoting消費者消費訊息Remoting消費者<-> Namesrv

1、消費者從Namesrv獲取Topic路由資訊, 包含Broker IPRemoting消費者 <-> Broker 。

  • 消費者通過Topic路由資訊,從指定Broker中拉取訊息消費。
  • 消費者定期和Broker心跳,上報當前消費者範例資訊。

5.0.0新增模組

Controller(控制器)和Kafka Controller類似,在RocketMQ中負責Broker Master的選舉和通知Broker 。

5.0.0新增模組

Broker <-> Controller

  1. Broker定期把Broker資訊上報Controller
  2. Broker同步副本狀態
  3. Controller選舉新的Broker Master後,通知全部Broker

5.0.0新增模組

Proxy無狀態服務,新使用者端通過Grpc介面存取Proxy進行收發訊息。

社群正在討論支援Remoting協定。

Proxy中支援嵌入Broker。

若設定proxyMode=LOCAL,則會在Proxy程序中啟動一個Broker範例。

5.0.0新增模組

Proxy <-> BrokerProxy

通過Remoting協定和Broker通訊,可以把Proxy當作一個Remoting的Client。

5.0.0新增模組

新Client新使用者端,支援生產、消費、管理功能。目前支援Grpc協定

5.0.0新增模組

新Client <-> Proxy新使用者端存取Proxy進行收發訊息,管理。