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

ApacheRocketMQ發表於2023-02-27

本文作者:李偉,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進行收發訊息,管理。

相關文章