設計一套Kafka到RocketMQ的雙寫+雙讀技術方案,實現無縫遷移!

設計一套Kafka到RocketMQ的雙寫+雙讀技術方案,實現無縫遷移!

    • 1、背景
    • 2、方案
    • 3、具體邏輯

1、背景

假設你們公司本來線上的MQ用的主要是Kafka,現在要從Kafka遷移到RocketMQ去,那么這個遷移的過程應該怎么做呢?應該采用什么樣的技術方案來做遷移呢?

2、方案

介紹一個MQ集群遷移過程中的雙寫+雙讀技術方案。

3、具體邏輯

簡單來說,如果你要做MQ集群遷移,是不可能那么的簡單粗暴的,因為你不可能說在某一個時間點突然之間就說把所有的Producer系統都停機,然后更新他的代碼,接著全部重新上線,然后所有Producer系統都把消息寫入到RocketMQ去了

一般來說,首先你要做到雙寫,也就是說,在你所有的Producer系統中,要引入一個雙寫的代碼,讓他同時往Kafka和RocketMQ中去寫入消息,然后多寫幾天,起碼雙寫要持續個1周左右,因為MQ一般都是實時數據,里面數據也就最多保留一周。

當你的雙寫持續一周過后,你會發現你的Kafka和RocketMQ里的數據看起來是幾乎一模一樣了,因為MQ反正也就保留最近幾天的數據,當你雙寫持續超過一周過后,你會發現Kafka和RocketMQ里的數據幾乎一模一樣了。

但是光是雙寫還是不夠的,還需要同時進行雙讀,也就是說在你雙寫的同時,你所有的Consumer系統都需要同時從Kafka和RocketMQ里獲取消息,分別都用一模一樣的邏輯處理一遍。

只不過從Kafka里獲取到的消息還是走核心邏輯去處理,然后可以落入數據庫或者是別的存儲什么的,但是對于RocketMQ里獲取到的消息,你可以用一樣的邏輯處理,但是不能把處理結果具體的落入數據庫之類的地方。

你的Consumer系統在同時從Kafka和RocketMQ進行消息讀取的時候,你需要統計每個MQ當日讀取和處理的消息的數量,這點非常的重要,同時對于RocketMQ讀取到的消息處理之后的結果,可以寫入一個臨時的存儲中。

同時你要觀察一段時間,當你發現持續雙寫和雙讀一段時間之后,如果所有的Consumer系統通過對比發現,從Kafka和RocketMQ讀取和處理的消息數量一致,同時處理之后得到的結果也都是一致的,此時就可以判斷說當前Kafka和RocketMQ里的消息是一致的,而且計算出來的結果也都是一致的。

這個時候就可以實施正式的切換了,你可以停機Producer系統,再重新修改后上線,全部修改為僅僅寫RocketMQ,這個時候他數據不會丟,因為之前已經雙寫了一段時間了,然后所有的Consumer系統可以全部下線后修改代碼再上線,全部基于RocketMQ來獲取消息,計算和處理,結果寫入存儲中。

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

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

相關文章

JAVA開發面試超詳細

一、Java 基礎 1.JDK 和 JRE 有什么區別? jdk:java development kit jre:java runtime Environment jdk是面向開發人員的,是開發工具包,包括開發人員需要用到的一些類。 jre是java運行時環境,包括java虛擬機…

Selenium探險家:駕馭Web自動化的秘籍與實戰

Hi,我是阿佑,今天將帶大伙們學會如何使用Selenium進行高效的網站測試,如何配置Selenium Grid實現分布式測試,以及如何預測和擁抱自動化測試的未來! 文章目錄 1. 引言2. 背景介紹2.1 Selenium概覽2.2 Python與Selenium的…

python數據可視化:自定義閉合區域填充顏色matplotlib.pyplot.fill()

【小白從小學Python、C、Java】 【考研初試復試畢業設計】 【Python基礎AI數據分析】 python數據可視化: 自定義閉合區域填充顏色 matplotlib.pyplot.fill() [太陽]選擇題 以下關于matplotlib.pyplot.fill()函數說法正確的是? import matplotlib.pyplo…

【ARM+Codesys案例】T3/RK3568/樹莓派+Codesys鋰電疊片機方案:結合CODESYS實現高效生產

鋰電疊片機解決方案 乘風破浪,促進新能源行業發展 鋰電池是依靠鋰離子在正極與負極之間移動來達到充放電目的的一種可充電電池,具有高能量密度、高電壓、壽命長、無記憶效應等優點。鋰電池屬于國家政策扶持的高速發展行業,近年發展快速&…

【Beyond Compare】專業的文件對比工具

一、Beyond Compare官方下載 二、Beyond Compare簡介 三、Beyond Compare 4激活 一、Beyond Compare官方下載 Beyond Compare官方下載 https://www.beyondcompare.cc/ Beyond Compare 4中文包 鏈接:https://pan.baidu.com/s/14igdUm0Xy7DFp4Jzb58AZg?pwdGLNG 提…

newinit.sh挖礦攻擊處理與規避方案

目錄 攻擊分析 恢復措施: 問題排查 攻擊入口分析 預防 臨時處理方案: 攻擊分析 攻擊者:職業黑客(99%) 攻擊方式:挖礦病毒newinit.sh和蠕蟲病毒pnscan 中毒現象: 服務器負載異常,具體表…

CTFHUB技能樹——SSRF(一)

目錄 一、SSRF(服務器端請求偽造) 漏洞產生原理: 漏洞一般存在于 產生SSRF漏洞的函數(PHP): 發現SSRF漏洞時: SSRF危害: SSRF漏洞利用手段: SSRF繞過方法: 二、CTFHUB技能樹 SSRF 1.Ht…

結構體的偏移地址,首地址的宏計算

C語言的庫函數中提供了計算結構體的一個元素在結構體中的偏移量,以及通過偏移量和結構體中元素的指針計算出來結構體的首地址。但是在一些場景沒有辦法使用C語言庫中的函數,那么就需要自己進行定義。 如下面代碼所示的兩個宏定義就完成了計算結構體成員偏…

如何解決elment ui必填驗證輸入空格通過校驗?

很久之前有個客戶定制了一個ERP系統,里面有個單位的必填項,是沒有任何規律的字符串,也就是只需要做必填即可,結果前段時間維護該信息的換了一個人,必填的單位居然是空白,因為數據缺失的原因導致后面一系列的工作流一個都提交不了,該員工意識到自己闖禍后直接跑路,聯系不…

SQL生成序列淺析

01.sqlserver版本 使用sqlserver將數據復制n條 selectt.indx,t.name,tmp.vlue from (values(1,蘋果) ) as t(indx, name) ,(select[number] as vluefrom master.dbo.spt_valueswhere [type] pand [number] between 1 and 10 ) as tmpspt_values是什么 spt_values是SQL Se…

oracle 12c GI卸載流程

集群節點停止服務 [crsctl stop crs -f grid運行deinstall [rootprimary1 bin]# su - grid [gridprimary1 ~]$ cd $ORACLE_HOME/deinstall [gridprimary1 deinstall]$ ls bootstrap_files.lst bootstrap.pl deinstall deinstall.pl deinstall.xml jlib readme.txt …

多張圖片上傳、圖片回顯、url路徑轉成File文件

1. 實現 背景&#xff1a;在表單中使用element-plus實現多張圖片上傳(限制最多10張)&#xff0c;因為還要與其他參數一起上傳&#xff0c;所以使用formData格式。 編輯表單回顯時得到的是圖片路徑數組&#xff0c;上傳的格式是File&#xff0c;所以要進行一次轉換。 <tem…

超頻是什么意思?超頻的好處和壞處

你是否曾經聽說過超頻&#xff1f;在電腦愛好者的圈子里&#xff0c;這個詞似乎非常熟悉&#xff0c;但對很多普通用戶來說&#xff0c;它可能還是一個神秘而陌生的存在。 電腦超頻是什么意思 電腦超頻&#xff08;Overclocking&#xff09;&#xff0c;顧名思義&#xff0c;是…

PCIe (1)

計算PCIe的吞吐 PCIe吞吐依賴以下因素 >protocol overhead >payload size >completion latency >flow control update latency >characteristics of the devices that form the link Protocol Overhead 如果是8B/10B的編碼,那么需要25%的開銷。 對于Gen…

前端面試題大合集7----模塊化/工程化/ES6+標準

一、簡述webpack的核心原理 &#xff08;1&#xff09;一切皆模塊 正如JS文件可以是一個“模塊”一樣&#xff0c;其它的文件也可視作模塊。因此可以執行require(myJsFile.js)&#xff0c;亦可執行require(myCssFile.css)&#xff0c;這意味著我們可以將事物分割成更小的、易…

堆排序和Topk問題

堆排序 堆排序即利用堆的思想來進行排序&#xff0c; 總共分為兩個步驟&#xff1a; 1. 建堆 升序&#xff1a;建大堆&#xff1b; 降序&#xff1a;建小堆 2 .利用堆刪除思想來進行排序 利用堆刪除思想來進行排序 建堆和堆刪除中都用到了向下調整&#xff0c;因此掌握了…

外賣系統關于redis使用解決高并發情況

1、如何配置redis 在java中操作redis 操作步驟&#xff1a; 1、導入Spring Data Redis的maven坐標 2、配置Redis數據源 3、編寫配置類&#xff0c;創建RedisTemplate對象 4、通過RedisTemplate對象操作Redis 2、Redis結合Lua腳本 減少網絡開銷&#xff1a;使用Lua腳本&#xf…

FolkMQ v1.5.1 發布(“新式”國產消息中間件)

FolkMQ 是個“新式”的消息中間件。強調&#xff1a;“小而巧”、“簡而強”。 功能簡表 角色功能生產者&#xff08;客戶端&#xff09;發布普通消息、Qos0消息、定時消息、順序消息、可過期消息、事務消息、廣播消息消費者&#xff08;客戶端&#xff09;訂閱、取消訂閱。消…

前端面試題日常練-day27 【面試題】

題目 希望這些選擇題能夠幫助您進行前端面試的準備&#xff0c;答案在文末。 1. 在Vue中&#xff0c;以下哪個選項可以用于監聽數據的變化并執行相應的操作&#xff1f; a) computed b) methods c) data d) watch 2. 在Vue中&#xff0c;以下哪種方式可以實現組件之間的通信…

中醫理療元宇宙 科技賦能中醫藥產業走向國際市場

基于380億參數量&#xff0c;對中醫藥海量文本進行數據訓練&#xff0c;實現方劑優化、機制闡釋和新適應癥的精準發現……日前在天津召開的數智賦能大健康產業新質生產力暨第四屆中醫藥國際發展大會上&#xff0c;由天士力醫藥集團與華為云共同開發的“數智本草”中醫藥大模型正…