RocketMQ 5.0 VS RocketMQ 4.x 变化知多少?

简介: RocketMQ 5.0 VS RocketMQ 4.x 变化知多少?

RocketMQ 5.0 VS RocketMQ 4.x 变化知多少?

今天来介绍一下 RocketMQ 5.0 源码上的变化。

RocketMQ 5.0 是一个里程碑式的版本,经历了近 5 年的打磨,代码变更达到 60%。

首先看一下源码中模块的变化,如下图:

从图中可以看到,RocketMQ 5.0 主要增加了 4 个模块儿,下面介绍一下这 4 个模块儿。

1. bazel

bazel 是 Google 开源的构建工具,目前广泛用于云计算领域的开源软件(如 Kubernetes)构建,它有如下特点:1.支持增量式编译、支持缓存、支持分布式扩展;2.bazel 可以清晰地以依赖关系图的方式展现出当前的依赖关系,比 makefile 更加方便;3.bazel支持多语言构建。

RocketMQ 5.0 引入了 bazel 构建。

2. container

在 RocketMQ 4.x 时代,如果采用 Master-Slave 架构,Broke 节点一旦挂了,是不能自动切换的。RocketMQ 5.0 对这个架构进行了改进,引入了 BrokerContainer 的概念,一个 BrokerContainer 中可以部署多个 Broker,这些 Broker 拥有独立的端口,功能完全独立,并且可以共享同一个节点的资源。如下图:

有创造性的是,在一个 BrokerContainer 中可以交叉部署 Master 和 Slave 节点,如下图两节点对等部署:

这样做有即使 Node1 节点挂了,Node2 节点中的 Broker1 可以提供读功能,并不会丢消息,而 Broker2 则可以继续提供读写功能。

3. controller

RocketMQ 5.0 引入了 DLedger Controller 架构,解决传统 DLedger 架构的不足。

3.1 传统 DLedger

在 RocketMQ 4.x 中,如果采用 DLedger 架构部署,Broker 挂掉后,是可以自动实现主从切换的。但这样需要用 Raft Commitlog 来取代 RocketMQ 自身的 Commitlog,因为只有这样 Commitlog 才会具有选举的能力。Broker 主节点挂掉后,从节点依照 DLedger 协议进行内部协商,选举出新的主节点,自动完成主备切换。

不过这样存在几个问题:

1.消息日志副本数必须是 3 个以上,这个是 Raft 协议自动选主的要求,造成资源浪费;

2.Raft 选主过程中必须有多数节点同意才能选主成功,副本数越多时间开销会越大,这会加大 ACK 延时;

3.CommitLog 主从同步需要使用 DLedger 库,也就是说 CommitLog 被看作是 Raft log 进行复制,这样 RocketMQ 原生的零拷贝、堆外内存的优势无法使用了。

3.1 DLedgerController

通过引入 DLedger Controller 架构,RocketMQ 将 DLedger 选主切换的能力独立成一个可以拔插的组件,这样 Master-Slave 架构也可以具有 Failover 的能力。

DLedger Controller 可以独立部署,也可以部署在 NameServer 中,共享 NameServer 资源。

部署在 NameServer:

独立部署:

4. Proxy

RocketMQ 5.0 为了更好地拥抱云原生,实现了计算和存储相分离。把计算相关的功能抽象到了 Proxy,协议适配、权限管理、消息管理等。Broker 则专注于存储,架构如下图:

这样 RocketMQ 可以更好地上云,更好地进行资源调度。

5. 总结

本文从源码角度讲述了 RocketMQ 5.0 主要的变化。

为了更好地拥抱云原生, RocketMQ 5.0 架构上发生了比较大的变化,实现计算存储相分离,并且引入 bazel 进行构建。

在高可用方面,RocketMQ 5.0 对传统的基于 DLedger 的高可用进行了改造,同时引入了 BrokerContainer 对等部署方案。

希望本文对你理解新版本的 RocketMQ 有所帮助。

结语

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、评论、收藏➕关注,您的支持是我坚持写作最大的动力。

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
12月前
|
消息中间件 存储 NoSQL
【消息中间件】Redis vs Kafka vs RabbitMQ
【消息中间件】Redis vs Kafka vs RabbitMQ
|
12月前
|
消息中间件 网络协议 JavaScript
「事件驱动架构」Kafka vs. RabbitMQ:架构、性能和用例
「事件驱动架构」Kafka vs. RabbitMQ:架构、性能和用例
|
消息中间件 存储 Kafka
RocketMQ 5.0 vs 4.9.X 图解架构对比
图解+详细说明,秒懂!
229 0
RocketMQ 5.0 vs 4.9.X 图解架构对比
|
消息中间件 存储 缓存
从源码上看,RocketMQ 5.0 跟 RocketMQ 4.x相比增加了哪几个模块
从源码上看,RocketMQ 5.0 跟 RocketMQ 4.x相比增加了哪几个模块
421 0
从源码上看,RocketMQ 5.0 跟 RocketMQ 4.x相比增加了哪几个模块
EMQ
|
消息中间件 监控 安全
EMQX 4.x 版本更新:Kafka 与 RocketMQ 集成安全增强
云原生分布式物联网接入平台EMQX此次发布包含多个功能更新:规则引擎RocketMQ支持ACL检查、Kafka支持SASL/SCRAM与SASL/GSSAPI认证以适配更多部署方式,提升MQTT共享订阅性能。
EMQ
250 0
EMQX 4.x 版本更新:Kafka 与 RocketMQ 集成安全增强
|
存储 消息中间件 运维
rocketmq 4.X 扩容思路
开篇  周末抽空去参加了rocketmq杭州站的Meetup,虽然之前阅读过rocketmq的一些源码,不过本身不是专业运维消息中间件的所以相对的运维经验不足,在跟公司的中间件普大神聊天的时候提到了一些问题,刚好趁这次机会一起请教了。
3709 0
|
存储 消息中间件 大数据
Kafka VS RocketMQ VS RabbitMQ
- - kafka RocketMQ RabbitMQ 数据来源 相关文章 定位 设计定位 系统间的数据流管道,实时数据处理。 例如:常规的消息系统、网站活性跟踪,监控数据,日志收集、处理等 非日志的可靠消息传输。
4113 0
|
2月前
|
消息中间件 网络协议 JavaScript
MQTT常见问题之微消息队列mqtt支持ipv6失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
2月前
|
消息中间件 物联网 Java
MQTT常见问题之微消息队列配置失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
2月前
|
消息中间件 存储 监控
RabbitMQ:分布式系统中的高效消息队列
RabbitMQ:分布式系统中的高效消息队列