RocketMQ 5.0 大手筆,擁抱云原生,支持流處理,高可用架構升級!

大家好,我是君哥。

RocketMQ 5.0 已經發布一段時間了,今天來分享一下 RocketMQ 5.0 有哪些新特性。

1 架構變化

RocketMQ 5.0 架構上的變化主要是為了更好的走向云原生。

RocketMQ 4.x 架構如下:

17d725348f151ec6368fd4b2acfef488.png

Broker 向 Name Server 注冊 Topic 路由信息,Producer 和 Consumer 則從 Name Server 獲取路由信息,然后 Producer 根據路由信息向 Broker 發送消息,Consumer 則根據路由信息從 Broker 拉取消息。

這個架構存在以下幾個問題:

1.富客戶端,客戶端同時支持 Java、C++、Go 等各種語言,如果為了跟應用程序隔離,把客戶端部署到 sidecar 中,這個 sidecar 會很大,部署難度高;

2.Broker 同時承擔計算和存儲的功能,不利于云原生環境下的資源解耦。

RocketMQ 5.0 架構如下圖:

865498fc9cb13c86ddc9c95fa4df3084.png

RocketMQ 5.0 在架構上主要做了兩個優化:1.通過引入無狀態的代理模塊,將 Broker 原來的協議適配、權限管理、消息管理等計算功能抽離到了代理模塊中,Broker 則專注于存儲功能。這樣在云環境下可以更好地進行資源調度;

2.RocketMQ 5.0 基于 gRPC 支持多語言 SDK,各語言 SDK API 在本地語言層面對齊,API 非常輕量級,更容易被使用和集成。

2 集成事件、流處理

RocketMQ 5.0 采用事件驅動架構來支持消息流式處理和輕計算,可以實現消息的就近計算和分析。

RocketMQ 5.0 增加了 RocketMQ-EventBridge 組件,這個組件兼容標準 CloudEvents 協議標準,既可以鏈接社區活躍的生態,又可以跟各大云廠商的產品進行集成,對云原生的支持非常友好。下面這張圖來自官網:

1f0e3a73d6cdca38c5f7d1e6448de708.jpeg

2.1 流式處理

為了更好地支持流失處理,RocketMQ 5.0 在原有 MessageQueue 的基礎上抽象出了邏輯隊列。一個邏輯隊列可以包含多個物理隊列,以此拼接出流式隊列。如下圖:

0540f40ed09066d6d851218b55d4fb96.png

這樣可以更加輕量級,做到秒級的擴縮容,即使物理節點發生變化也不需要復制遷移數據,數據存儲的調度也更加靈活。

2.2 計算框架

在計算框架方面,RocketMQ 5.0 主要有兩個變化:

1.引入流式處理框架 RSteams,這樣 RocketMQ 自身就可以完成輕量級的理和計算;

2.引入輕量級 SQL 查詢引擎 RSQLDB,RSQLDB 可以兼容了 Flink/Blink SQL 標準,實現了 RocketMQ 和 Flink/Blink 的融合。比如對于輕量級的計算,可以使用 SQL 在 RocketMQ 完成,而對于重量級的計算,RocketMQ 資源受限時,可以從 RocketMQ 遷移到 Flink 處理。

3 高可用

在 RocketMQ 5.0 之前,高可用架構有兩個階段:

1.RocketMQ 4.5 之前采用 Master-Slave 部署,這種架構 Master 發生故障后是不能自動切換的,對集群的影響會比較大;

2.RocketMQ 4.5 之后采用基于 raft 協議的 DLedger 算法來進行主從切換,架構如下圖:

01be5d39cb33e6b282c2a2a5e67c1610.png

3.1 Master-Slave 架構優化

RocketMQ 5.0 對 Master-Slave 架構和基于 Raft 的架構都做了優化。

對于 Master-Slave 架構的升級,RocketMQ 5.0 引入了 BrokerContainer 的概念,一個 BrokerContainer 中可以部署多個 Broker,這些 Broker 擁有獨立的端口,功能完全獨立,可以通過 admin 來增加或減少 Broker。如下圖:

8c93f3ae34dfd61496f9fa1fc3f0516b.png

這樣一個 BrokerContainer 中的多個 Broker 可以共享同一個節點的資源,提高資源利用率。

同時,在一個 BrokerContainer 中可以同時部署 Broker 的 Master 和 Slave 節點,這樣就可以通過 Master/Slave 交叉部署來實現節點對等,如下圖兩節點對等部署:

8bfaad2e584072519c02d8f642659945.png

即使 Node1 掛了,Node2 節點中的 Broker1 可以提供讀功能,并不會丟消息,Broker2 可以提供讀寫功能。

再看下面三個節點的對等部署架構圖:

b5a72424a94fc10f4168442cd8f8a374.png

每個 Node 的 BrokerContainer 中都有 1 個 Master 跟 2 個 Slave 節點,如果其中一個 Node 掛了,其他兩個 Node 上的 Broker 可以繼續提供讀寫服務。

3.2 Raft 架構優化

基于 Raft 架構雖然可以實現主節點故障后自動切換,但也存在幾個問題:

1.消息日志副本數必須是 3 個以上,這個是 Raft 協議自動選主的要求,造成資源浪費;

2.Raft 選主過程中必須有多數節點同意才能選主成功,副本數越多時間開銷會越大,這會加大 ACK 延時;

3.CommitLog 主從同步需要使用 DLedger 庫,也就是說 CommitLog 被看作是 Raft log 進行復制,這樣 RocketMQ 原生的零拷貝、堆外內存的優勢無法保留了。

RocketMQ 5.0 專門增加了輕量級的 DLedgerControlller 選主組件,將選主的切換能力上移,這個組件是可拔插的,既可以部署在 NameServer 中,也可以部署在本地。如下圖:

6dcc88ad60c263b973ec99b225f2279d.png

引入了 DLedgerControlller 組件后,消息主備復制還是采用 RocketMQ 原生的基于 Master-Slave 架構的復制能力,復制效率高。

4 總結

本文概括性地介紹了 RocketMQ 5.0 比較有亮點的新特性,希望能夠讓你對新版本有一定了解,深入的介紹見后面的文章。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281727.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281727.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php驗證碼顯示亂碼,如何解決php驗證碼亂碼問題

php驗證碼亂碼的解決辦法&#xff1a;1、修改訪問驗證碼生成方法函數的路徑&#xff1b;2、修改文件編碼&#xff0c;并去掉BOM頭&#xff1b;3、檢查驗證碼生成方法&#xff1b;4、修改服務環境。具體問題&#xff1a;php驗證碼輸出全是亂碼...<?php session_start();head…

中國HBase技術社區第五屆MeetUp ——HBase技術解析及應用實踐(深圳站)

HBase—Hadoop Database是一個分布式的、面向列的開源數據庫&#xff0c;該技術來源于 Fay Chang 所撰寫的Google論文“Bigtable&#xff1a;一個結構化數據的分布式存儲系統”。HBase的特點是高可靠性、高性能、面向列、可伸縮的分布式存儲系統&#xff0c;如今HBase已經廣泛應…

如何查找Power BI本地報表服務器產品密鑰

Power BI 報表服務器產品密鑰&#xff0c;以便在生產環境中安裝服務器。 已下載 Power BI 報表服務器&#xff0c;并已購買 SQL Server Enterprise 軟件保障協議。 或者&#xff0c;已購買 Power BI Premium。 希望在生產環境中安裝服務器&#xff0c;但需要產品密鑰才能進行安…

【.NET番外篇】Rust環境搭建+基礎開發入門+Rust與.NET6、C++的基礎運算性能比較

前言&#xff1a;突然想打算把Rust作為將來自己主要的副編程語言。當然&#xff0c;主語言還是C#&#xff0c;畢竟.NET平臺這么強大&#xff0c;寫起來就是爽。緣起&#xff1a;之前打算一些新的產品或者新的要開發的東西&#xff0c;由于沒有歷史包袱&#xff0c;就想重新選型…

基本圖形的光柵化算法

如何在指定的輸出設備上根據坐標描述構造基本二維幾何圖形&#xff08;點、直線、圓、橢圓、多邊形域、字符串及其相關屬性等&#xff09;。 圖形生成的概念 圖形的生成&#xff1a;是在指定的輸出設備上&#xff0c;根據坐標描述構造二維幾何圖形。 圖形的掃描轉換&#xff1a…

php左側,php左側補零

在php中有兩個函數——至少有兩個是否有其他的我還不知道&#xff0c;能夠實現數字補零&#xff0c;str_pad(),sprintf()詳細如下str_pad顧名思義這個函數是針對字符串來說的這個可以對指定的字符串填補任何其它的字符串例如:str_pad(帶填補的字符串,填補后的長度&#xff0c;填…

python - work3

# -*- coding:utf-8 -*-project: jiaxyauthor: Jimmyfile: work_20181107.pyide: PyCharm Community Editiontime: 2018-11-07 10:46blog: https://www.cnblogs.com/gotesting/## 1&#xff1a;一個足球隊在尋找年齡在10歲到12歲的小女孩&#xff08;包括10歲和12歲&#xff09…

團隊-中國象棋-最終程序

托管平臺地址:https://gitee.com/zhanghongjian666/ZhongGuoXiangQi 小組名稱:exciting 小組成員合照: 程序運行方法:html 程序運行示例及運行結果:轉載于:https://www.cnblogs.com/qwsa/p/7944093.html

NET CORE 基于緩存策略的SignalR控制推送頻率(每多少秒/多少次)API接口控制(限流)...

ASP.NET Core SignalR 概述&#xff0c;自行去官網搜。SignalR 沒有控制和前端推送頻率的功能&#xff0c;就是后端一旦發送請求&#xff0c;前端立馬響應。或者前端發送請求&#xff0c;后端立馬響應&#xff0c;但是如果誤操作&#xff0c;或者業務原因&#xff0c;對產生的信…

svn 的使用(二)

這篇主要介紹下 svn 鉤子的使用&#xff0c;svn 的安裝以及配置等能夠查看 svn 的使用&#xff08;一&#xff09; 我們能夠在svn創建的倉庫目錄下看到hooks 目錄。這里面就存放這個各種svn操作同一時候會運行的腳本文件。&#xff08;你能夠自己查看每一個腳本文件&#xff0c…

java原子類場景,CAS你知道嗎?原子類AtomicInteger的ABA問題談談?,原子共面問題...

CAS你知道嗎&#xff1f;原子類AtomicInteger的ABA問題談談&#xff1f;&#xff0c;原子共面問題(1)CAS是什么&#xff1f;比較并交換舉例1, CAS產生場景代碼&#xff1f;importjava.util.concurrent.atomic.AtomicInteger;public classCASDemo {public static voidmain(Stri…

ABP Vnext 批量導入用戶,解決密碼加密問題

因為ABP Vnext在密碼加密方面使用的鹽加密的方式&#xff0c;底層的加密方式讓人摸不著頭腦。如何需要批量導入用戶的時候&#xff0c;這個密碼問題就很頭疼。假設&#xff0c;已經有一個集合List<entity>的用戶數據了&#xff0c;此時進行循環取出一條用戶信息&#xff…

深入分析JavaWeb Item7 -- HttpServletResponse詳解

Web服務器收到客戶端的http請求&#xff0c;會針對每一次請求&#xff0c;分別創建一個用于代表請求的request對象、和代表響應的response對象。request和response對象即然代表請求和響應&#xff0c;那我們要獲取客戶機提交過來的數據&#xff0c;只需要找request對象就行了。…

Spring.net學習記錄

Spring.Net功能&#xff1a; 1、控制反轉&#xff08;IOC&#xff09;&#xff1a;就是創建對象的權利由開發人員自己控制New&#xff0c;轉到了有容器來控制 2、依賴注入&#xff08;DI&#xff09;&#xff1a;就是通過容器來創建對象的時候&#xff0c;在對象初始化時給一些…

uAdmin the Golang Web framework

2019獨角獸企業重金招聘Python工程師標準>>> A little over two years ago, I started looking for a web framework like Django for Golang but to my surprise, I couldn’t find anything that even does the basic. My requirements were simple: A standard w…

ABP Vnext 數據庫表字段存在IsDeleted如何物理刪除HardDeleteAsync

ABP Vnext在寫表實體會繼承 xxxEntity : FullAuditedAggregateRoot<Guid>此時這個聚合根會包含一個 IsDeleted字段屬性&#xff0c;一旦繼承了這個軟刪除字段&#xff0c;你在倉儲對象調用 await _xxxxRepository.DeleteAsync(x > x.Id > 0)時的時候&#xff0c;…

詳解當當網的分布式作業框架elastic-job

詳解當當網的分布式作業框架elastic-job

java條件觸發,條件事件觸發Anylogic

所以首先event.restart()函數僅在事件具有觸發類型時才適用&#xff1a;timeout和mode&#xff1a;user control&#xff0c;否則你的event.restart()函數什么也不做......其次&#xff0c;你需要在有條件的事件上調用你的函數&#xff0c;但是在停車的那一刻......你可以在car…

攻城不易守城更難,匯付天下該如何守住打下來的“江山”?

伴隨著相關監管政策的實施&#xff0c;第三方支付市場儼然已經迎來了“罰單潮”。根據不完全統計&#xff0c;截至2018年10月8日&#xff0c;央行已開出109張支付罰單&#xff0c;國付寶等多家支付機構罰金甚至高達千萬以上&#xff0c;今年累計處罰的金額已超過2億元。照此速度…

1024技術論壇 | C#與.NET技術新發展

主辦方簡介上海維宏電子科技股份有限公司&#xff08;維宏股份&#xff0c;股票代碼&#xff1a;300508&#xff09;&#xff0c;是一家專業提供運動控制系統解決方案的高科技企業&#xff0c;公司擁有雄厚的研發力量和高素質的服務隊伍&#xff0c;我們以快捷的速度&#xff0…