本文作者:李偉,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
- Broker定期把Broker資訊上報Controller
- Broker同步副本狀態
- 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進行收發訊息,管理。