一、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 |
1. 消费者从Namesrv获取Topic路由信息, 包含Broker IP |
消费者 <-> Broker |
消费者通过Topic路由信息,从指定Broker中拉取消息消费消费者定期和Broker心跳,上报当前消费者实例信息 |
二、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 |
|
Remoting消费者 | 消费消息 |
Remoting消费者<-> Namesrv |
1. 消费者从Namesrv获取Topic路由信息, 包含 Broker IP |
Remoting消费者 <-> Broker |
|
5.0.0新增模块 Controller(控制器) |
和Kafka Controller类似,在RocketMQ中负责Broker Master的选举和通知Broker |
5.0.0新增模块 Broker <-> Controller |
|
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进行收发消息,管理 |