当前位置: 首页 > 科技观察

RocketMQ5.0大手笔,拥抱云原生,支持流处理,升级高可用架构!

时间:2023-03-11 22:43:02 科技观察

大家好,我是君哥,RocketMQ5.0已经发布有一段时间了。今天就来分享一下RocketMQ5.0的新特性。1、架构变化RocketMQ5.0的架构变化主要是为了更好的向云原生迈进。RocketMQ4.x架构如下:Broker向NameServer注册Topic路由信息,Producer和Consumer从NameServer获取路由信息,然后Producer根据路由信息向Broker发送消息,Consumer根据路由信息从Broker拉取消息.这种架构存在以下问题:1.富客户端,客户端同时支持Java、C++、Go等语言。如果客户端为了和应用隔离,部署在sidecar中,sidecar会非常大。难度高;2.Broker同时承担计算和存储的功能,不利于云原生环境下资源的解耦。RocketMQ5.0架构如下图所示:RocketMQ5.0在架构上主要做了两个优化:1.通过引入无状态代理模块,将Broker原有的协议适配、权限管理、消息管理等计算功能抽取出来代理模块,Broker侧重于存储功能。这样可以在云环境中实现更好的资源调度;2、RocketMQ5.0支持基于gRPC的多语言SDK,各语言SDKAPI在本地语言层面对齐。API非常轻量级,更易于使用和集成。2、集成事件和流处理RocketMQ5.0采用事件驱动架构,支持消息流处理和轻计算,可以实现消息的就近计算和分析。RocketMQ5.0增加了RocketMQ-EventBridge组件。该组件与标准的CloudEvents协议标准兼容。不仅可以链接社区的活跃生态,还可以与各大云厂商的产品进行整合。对云原生支持非常友好。下图来自官网:(1)流处理为了更好的支持churn处理,RocketMQ5.0在原有MessageQueue的基础上抽象出逻辑队列。一个逻辑队列可以包含多个物理队列来拼接出流队列。如下图所示:这样可以更加轻量化,实现秒级扩缩容。即使物理节点发生变化,也无需复制迁移数据,数据存储的调度更加灵活。(2)计算框架在计算框架方面,RocketMQ5.0主要有两个变化:1.引入了流处理框架RSteams,让RocketMQ本身可以完成轻量级的处理和计算;2、引入轻量级SQL查询引擎RSQLDB,RSQLDB兼容Flink/BlinkSQL标准,实现RocketMQ与Flink/Blink的融合。比如对于轻量级的计算,可以在RocketMQ中使用SQL来完成,而对于重量级的计算,当RocketMQ资源有限时,可以从RocketMQ迁移到Flink中进行处理。三、高可用在RocketMQ5.0之前,高可用架构有两个阶段:1、在RocketMQ4.5之前,采用Master-Slave部署。这种架构不能在Master失效后自动切换,对集群的影响会比较大;2、RocketMQ4.5之后,采用基于raft协议的DLedger算法进行主从切换。针对Master-Slave架构的升级,RocketMQ5.0引入了BrokerContainer的概念。一个BrokerContainer中可以部署多个Broker。这些Broker拥有独立的端口和完全独立的功能。经纪人可以通过管理员增加或减少。如下图所示:这样一个BrokerContainer中的多个Broker可以共享同一个节点的资源,提高资源利用率。同时可以将Broker的Master和Slave节点同时部署在一个BrokerContainer中,这样就可以通过Master/Slave交叉部署实现节点对等,如下图所示:即使Node1挂了up,Node2节点中的Broker1可以提供读功能,并且不会丢失消息,Broker2可以提供读写功能。看下面三个节点的点对点部署架构图:每个Node的BrokerContainer有一个Master和两个Slave节点。如果其中一个Node发生故障,另外两个Node上的Brokers可以继续提供读写服务。(2)Raft架构优化虽然Raft架构可以在故障后自动切换master节点,但是仍然存在几个问题:1.消息日志的副本数必须大??于3,这是Raft协议自动选择的要求掌握,造成资源浪费;2.Raft选主过程中,必须有多数节点同意才能选主成功。副本越多,时间开销越大,会增加ACK延迟;3、CommitLog主从同步需要使用DLedger库,也就是说CommitLog是作为一个Raft日志来进行复制的,这样就无法保留RocketMQ原生的零拷贝和堆外内存的优势.RocketMQ5.0专门加入了轻量级的DLedgerController组件来提升Leader的切换能力。该组件是可插拔的,可以部署在NameServer上或本地。如下图所示:引入DLedgerController组件后,消息的主从复制仍然使用RocketMQ原有的基于Master-Slave架构的复制能力,复制效率高。4.总结本文简要介绍了RocketMQ5.0的亮点新特性,希望能让大家对新版本有一定的了解。更深入的介绍,请看下面的文章。