本文作者:李伟,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进行收发音讯,治理。