RocketMQ 5,2024年最新Java开发新手入门教程

“存储计算分离只是适应了部分场景,架构的演进还是要回归到客户的真实场景。”

面向多场景的弹性架构

在 4.0 版本中,RocketMQ 主要由 NameServer、Broker、Producer 以及 Consumer 四部分构成。Producer 和 Consumer 由用户进行分布式部署。NameServer 以轻量级的方式提供服务发现和路由功能,每个 NameServer 存有全量的路由信息,提供对等的读写服务,支持快速扩缩容。Broker 负责消息存储,以 Topic 为纬度支持轻量级的队列,单机可以支撑上万队列规模。

在 5.0 版本中,对系统中的不同服务进行了解耦,比如 Nameserver 和 Broker,设计为以下架构:

终于!RocketMQ发布5.0版本:架构大重构,代码变更比例高达60%

图中借用了 Service Mesh 关于控制和数据面的划分思想以及 xDS 的概念来描述各个组件的职责。

  • 全新轻量级 SDK,基于 gRPC 协议重新打造的一批多语言客户端,采取 gRPC 的主要考虑其在云原生时代的标准性、兼容性以及多语言传输层代码的生成能力。

  • 导航服务(Navigation Server),这是个可选组件,通过 LB Group 暴露给客户端。客户端通过导航服务获取数据面的接入点信息(Endpoint),随后通过计算集群 CBroker 的 LB Group 进行消息的收发。通过 EDS 暴露 CBroker 的接入点信息的方式比通过 DNS 解析的负载均衡更加智能且可以更精细实现流量控制等逻辑。

  • NameServer,RocketMQ 原有的核心组件,主要提供 SBroker 的集群发现(CDS),存储单元 Topic 的路由发现(RDS)等,为运维控制台组件、用户控制台组件、计算集群 CBroker 提供 xDS 服务。

  • Compute-Broker(CBroker),重构版本后抽象出的无状态计算集群,作为数据流量的入口,提供鉴权与签名、上层计量统计、资源管理、客户端连接管理、消费者管控治理、客户端 RPC 处理、消息编解码处理、流量控制、多协议支持等。

  • Storage-Broker(SBroker),重构后下沉的存储节点,专注于提供极具竞争力的高性能、低延迟的存储服务。

  • LB Group,根据用户的需求提供多样化的负载均衡接入能力。

终于!RocketMQ发布5.0版本:架构大重构,代码变更比例高达60%

但存储计算一体化在很多场景下依然是最佳选择,因此,RocketMQ 在 5.0 为存储计算分离架构提供了灵活的选择:可分可合。如上图所示,左边是一个分离部署的形态,右边是合并部署的形态,合并部署时计算节点可以作为存储节点的 SideCar,采用网格的思想部署,也可以将计算和存储揉进同一个进程部署。

在云原生架构设计中,我们常听到要让基础设施完全解耦,这意味着可以让用户在任意的基础设施上部署交付。现在公有云、专有云、混合云、多云下的基础设施均不相同,以存储为例,可能有云盘,也有可能是本地盘;以网络为例,可能是经典网络,也有可能是多 VPC 网络… 这样的环境要求对于基础服务的云原生架构设计是一个非常大的挑战。所以,RocketMQ 5.0 架构的重塑,很重要的改变是在不同的应用场景下都能提供极致的弹性和统一的架构,“我们称之为场景多元化”,RocketMQ 创始人誓嘉表示。

举例来说,使用 RocketMQ 可以自由选择私有化多副本部署方式或者利用公共云云盘的方式,后者既能提升性能又能降低硬件成本及运维成本,也带来了更高的弹性能力。在对一致性要求非常高且需要主从自动切换能力的场景,Raft 又可以保证数据可靠性、业务可用性。同时,RocketMQ 还支持多元索引,可以基于一份原始数据构建多份索引来满足不同的业务场景,包括消费索引、查询索引、批索引、百万队列索引等,以便在同一套架构支撑着不同行业的各种差异化诉求。

2融合“消息、事件、流”于一体

拥抱 Flink 生态的轻量级流处理平台

目前业界有两个发展态势,一个是不可阻挡的云原生改造趋势,另一个是流计算时代的全面兴起。因此,除提供对云原生的支持外,作为业界首个兼容 Flink 生态的消息产品,RocketMQ 5.0 这个大版本里面提供了 rocketmq-streams 实时计算框架, 目前已经在 Apache 社区开源。

作为一套全新的流式处理框架,rocketmq-streams 依赖少、部署简单,可任意横向扩展,利用 RocketMQ 资源即可完成轻量级的数据处理和计算。除此以外,为了方便开发者让基于 RocketMQ 的流式计算更容易,后续还会开源 rsqlDB,为开发者提供基于 SQL 的开发体验。

在 Streaming 领域,与 Kafka 只是作为 Flink 的上下游数据不同,RocketMQ 会全面拥抱 Flink 开源生态。RocketMQ-flink connector 将在近期从社区毕业,相比于 Kafka-flink connector,RocketMQ 实现了最新的 FLIP-27/FLIP-143 接口,能够为开发者提供更一致的流批一体实时数据处理体验。

更为重要的是,与其他任何消息产品不同,rsqlDB 首创性地兼容了 Flink/Blink SQL 标准以及 UDF/UDAF/UDTF,使得两个开源产品的生态可以更好地融合,开发者可以将 Flink/Blink 已有 SQL 计算任务迁移到 RocketMQ ,在 RocketMQ 内部完成轻量级的计算处理,在算力受限或者更大规模的场景下,同样可以将 RocketMQ 的实时计算任务迁移到 Flink,利用 Flink 的大数据计算能力满足业务诉求。

另外,RocketMQ 4.x 的设计里,用户的消息分布在 Topic 内的多个队列上,但这些队列都是和物理节点内的索引文件一一对应。这样的设计虽然能够保证单机范围内万级队列的高效读写,但也导致了运维不灵活的问题,即 RocketMQ 的存储物理节点扩缩容时,用户 Topic 内的队列数量就会产生变化。众所周知,在流式数据处理过程中上层业务一般要求存储队列始终固定,同时还要求在底层节点运维过程中物理节点的变化对上层队列是透明的,只有这样才能保证流式数据处理的顺序性和完整性。

RocketMQ 5.0 将消息队列下沉为物理队列,上层重新抽象了逻辑队列。一个逻辑队列可以包含多个物理队列,各个物理队列都作为逻辑队列的一个片段,以此拼接出真正的流式队列。也因此可以做到更轻量,秒级扩缩,在物理节点发生变化时不涉及到存量数据复制迁移;实现数据存储的灵活调度,配合 TTL 实现无限存储能力。

终于!RocketMQ发布5.0版本:架构大重构,代码变更比例高达60%

RocketMQ 5.0 通过全新设计实现的 Streaming 计算框架以及对 Streaming 场景的逻辑队列存储优化,使得 RocketMQ 快速具备了完善的流式数据计算能力和兼容 Flink 的 SQL 计算能力,所以这个版本绝对算得上是一次里程碑式的发布。

消息系统的未来:事件流

另一方面,“基于云厂商的视角,我们判断在企业全面上云的时代,事件驱动又会重新发挥作用”,林清山表示。

“我们发现在企业数字化转型进入深水区之后,企业系统的业务集成不再仅仅需要一个消息通道。用户的业务集成必然会涉及到复杂异构的 IaaS 基础设施打通与连接;对信息的深层次解析和价值挖掘;低代码、弹性高效的完成业务开发与集成。而这些新的诉求都需要在消息通道的基础上重新定义事件标准、异构连接、低代码、无服务器等开发模式。因此可以简单地下一个断言,事件驱动将是消息驱动在业务集成领域的下一个演进阶段。”

基于上述判断,从 RocketMQ 5.0 开始,云时代事件驱动的基础设施建设将成为下一阶段 RocketMQ 预言演进的重中之重。从 5.0 开始,RocketMQ 会基于标准、开放的 CloudEvents 1.0 协议连接海量异构、复杂云环境,并配合 Serverless 运行时支撑上层事件驱动服务。这一计划当前正在公共云环境进行产品孵化。在阿里云上已经发布的 EventBridge 正是这样的一款事件驱动运行时产品,用来承载海量云服务、自定义应用的事件集成和驱动处理。未来在完成初期孵化后,EventBridge 会贡献到开源 RocketMQ,进一步促进开源事件生态的集成。

终于!RocketMQ发布5.0版本:架构大重构,代码变更比例高达60%

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。

学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。

道路是曲折的,前途是光明的!”

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-o3lsZo1e-1712664999898)]

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值