RocketMQ 5.0 vs 4.9.X 图解架构对比

简介: 图解+详细说明,秒懂!

本文作者:李伟,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进行收发消息,管理。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
5天前
|
网络协议 Java 物联网
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
24 2
|
30天前
|
消息中间件 存储 缓存
架构设计篇问题之消息队列(MQ)在微服务系统中问题如何解决
架构设计篇问题之消息队列(MQ)在微服务系统中问题如何解决
|
2月前
|
消息中间件 存储 SQL
RocketMQ与Kafka架构深度对比
RocketMQ与Kafka架构深度对比
|
3月前
|
消息中间件 存储 Apache
MQ产品使用合集之有RocketMQ arm架构的镜像吗
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
254 1
|
3月前
|
消息中间件 Java RocketMQ
Spring Cloud RocketMQ:构建可靠消息驱动的微服务架构
【4月更文挑战第28天】消息队列在微服务架构中扮演着至关重要的角色,能够实现服务之间的解耦、异步通信以及数据分发。Spring Cloud RocketMQ作为Apache RocketMQ的Spring Cloud集成,为微服务架构提供了可靠的消息传输机制。
140 1
|
3月前
|
消息中间件 存储 数据库
RabbitMQ入门指南(二):架构和管理控制台的使用
RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了RabbitMQ架构和管理控制台的使用等内容。
141 0
RabbitMQ入门指南(二):架构和管理控制台的使用
|
3月前
|
消息中间件 安全 Java
一文读懂RabbitMQ核心概念及架构
一文读懂RabbitMQ核心概念及架构
|
3月前
|
消息中间件 存储 Cloud Native
深度剖析 RocketMQ 5.0,架构解析:云原生架构如何支撑多元化场景?
了解 RocketMQ 5.0 的核心概念和架构概览;然后我们会从集群角度出发,从宏观视角学习 RocketMQ 的管控链路、数据链路、客户端和服务端如何交互;学习 RocketMQ 如何实现数据的存储,数据的高可用,如何利用云原生存储进一步提升竞争力。
140749 3
|
22天前
|
消息中间件 C语言 RocketMQ
消息队列 MQ操作报错合集之出现"Connection reset by peer"的错误,该如何处理
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
22天前
|
消息中间件 Java C语言
消息队列 MQ使用问题之在使用C++客户端和GBase的ESQL进行编译时出现core dump,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。