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