本文作者:李伟,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 -> NamesrvBroker定期把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 -> NamesrvBroker定期把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 <-> ControllerBroker定期把Broker信息上报ControllerBroker同步正本状态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进行收发音讯,治理

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进行收发音讯,治理。