从源码上看,RocketMQ 5.0 跟 RocketMQ 4.x相比增加了哪几个模块

news2024/9/22 9:39:19

今天来介绍一下 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 有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园生活互助平台06qe4

对于即将毕业或者即将做课设的同学而言,由于经验的欠缺,面临的第一个难题就是选题,确定好题目之后便是开题报告,如果选题首先看自己学习那些技术,不同技术适合做不同的产品,比如自己会些简单的Java语言&…

DataScience:KNIME工具的简介、安装、使用方法之详细攻略

DataScience:KNIME工具的简介、安装、使用方法之详细攻略 目录 KNIME的简介—数据挖掘与分析工具 1、KNIME软件如何帮助您的数据分析? 1.1、Create 1.2、Productionize 2、KNIME Analytics Platform 3、KNIME Hub KNIME的安装 KNIME的使用方法 1、构建第一…

[附源码]java毕业设计领导干部听课评课管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【深入浅出Spring6】第四期——实例化Bean和Bean的生命周期

一、获取 Bean Spring 提供了多种实例化Bean的方式:【只是表现形式不同,底层都是通过构造方法创建对象的】 通过构造方法实例化 【最简单的方式直接声明bean】通过简单工厂模式实例化 【定义一个简单模式工厂,然后通过工厂的静态方法获得Bea…

P3205 [HNOI2010]合唱队

[HNOI2010]合唱队 题目描述 为了在即将到来的晚会上有更好的演出效果,作为 AAA 合唱队负责人的小 A 需要将合唱队的人根据他们的身高排出一个队形。假定合唱队一共 nnn 个人,第 iii 个人的身高为 hih_ihi​ 米(1000≤hi≤20001000 \le h_i …

Java网络编程套接字

文章目录1、网络编程基础2、Socket套接字2.1 Java数据报套接字通信模型2.2 Java流式套接字通信模型2.3 Socket编程注意事项3、UDP数据报套接字编程4、TCP流式套接字编程1、网络编程基础 在没有网路之前,两个进程只能在同一主机上进行通信,但是无法跨距离…

【kubernetes篇】使用Nfs实现kubernetes持久化存储

引言 在kubernetes使用的过程中,有很多数据需要持久化保存。而kubernetes本身不能实现这样的功能,所以需要提供外部存储来实现。nfs网络文件系统,能良好支持pv动态创建等功能,是一个不错的持久化保存方式。今天将这一部分内容作以…

jsx代码如何变成dom

jsx代码如何变成dom一、三个问题考察对jsx的理解二、jsx的本质以及它和js之间是什么关系?2.1 jsx是什么2.2 和js的关系2.3 jsx的本质三、为什么要用jsx?不用会有什么后果四、jsx背后的功能模块是什么?这个功能模块都做了哪些事情?…

DVWA 之 SQL注入(非盲注)

文章目录SQL注入1.判断是否存在注入,注入是字符型还是数字型2.猜解SQL查询语句中的字段数3.确定显示的字段顺序4.获取当前数据库5.获取数据库中的表6.获取表中的字段名7.下载数据SQL注入 步骤: 1.判断是否存在注入,注入是字符型还是数字型 2…

数据库平滑扩容方案剖析

1. 扩容方案剖析 1.1 扩容问题 在项目初期,我们部署了三个数据库A、B、C,此时数据库的规模可以满足我们的业务需求。为了将数据做到平均分配,我们在Service服务层使用uid%3进行取模分片,从而将数据平均分配到三个数据库中。 如…

4-6 最小生成树Prim,Kruskal(贪心)

4.6最小生成树 Prim,Kruskal(贪心) 一、问题描述 设G (V,E)是无向连通带权图,即一个网络。E中每条边(u,v)的权为 c[u][v]。 如果G的子图G’是一棵包含G的所有顶点的树,则称G’为G的生成树。生成树上各边权的总和称为该生成树的耗费。 在G的所有生成树中…

java计算机毕业设计基于安卓Android的校园快药APP-药店管理app

项目介绍 本文介绍了校园快药APP软件开发建设的意义和国内外发展现状,然后详细描述了所开发手机APP的可行性分析,并分析了手机APP所要实现的功能。因为校园快药设施较多,而且人口密集,不能更好的管理校园快药,造成需要时患者不必要的伤亡,所以采用比较方便的、容易便携的手机AP…

[附源码]Python计算机毕业设计Excel操作题自动评分系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

基于PHP+MySQL的企业宣传展示网

随着互联网的发展,企业越来越重视网上宣传渠道了。谢现在各大企业都有了自己的官网,以达到宣传企业或方便客户了解企业的目的。PHP企业宣传展示网分为前台和后台两部分。前台不部分主要是让用户了解和查看及动态等信息,使用的后台部分主要是企业的管理人员对网站的信息进行管理…

股票系统接口是如何进行数据共享的?

股票系统接口系统在量化交易中常见的一种数据挖掘系统,就比如说,如果你想要从别的网站或服务器上获取资源或信息,别人是不会把数据库共享过来的,他只能给你提供一个他们写好的编程方法来获取数据。也就是说通过股票系统接口输入你…

springboot15:junit5的使用

1.测试平台Junit springboot新版使用junit 只需要标注一个注解SpringBootTest然后方法中标注Test即可 以前springboot的使用 比较困难 现在整合使用后 只需要编写测试方法Test写测试的逻辑,整个类具有spring的功能,比如事务(测试完成后会自动…

补盲激光雷达「PK」4D成像雷达,车企会作何选择?

关于4D成像雷达和激光雷达的争论,在此之前,两方势力之间还是有些克制。「谁也不是替代谁」,成了各方一致的看法。目标,也很一致,就是补齐摄像头的物理性能缺陷。 比如,与激光雷达相比,4D成像雷…

Python之第十一章 面向对象 --- 基础

目录 1.面向对象编程思想 1.编程思想 2.面向过程编程思想 3.面向对象编程思想 例 面向对象报名案例分析 面向过程与面向对象的区别 2.面向对象专业术语 1.组成 2.对象(object) 3.类: 1.引入类的原因 2.定义: 3.类的定…

2022HDC见闻与新技术学习体验分享

一、创新照见未来,共建鸿蒙世界,主题演讲笔记 以创新照见未来,共建鸿蒙世界为主题的第四界HDC大会于2022年11月4日在东莞松山湖线上与线下同时开启。本次大会展示了鸿蒙生态的最新成果与发展规划。第一天的主题演讲中,华为发布了解…

06-HTTPS单向认证及Java案例

一、单向认证流程 单向认证流程中,服务器端保存着公钥证书和私钥两个文件,整个握手过程如下: 客户端发起建立HTTPS连接请求,将SSL协议版本的信息发送给服务器端;服务器端将本机的公钥证书(server.crt&am…