乐趣区

关于rocketmq:RocketMQ-50-vs-49X-图解架构对比

本文作者:李伟,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

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

退出移动版