實(shí)戰(zhàn)1|分布式消息中間件Kafka業(yè)務(wù)遷移
分布式消息服務(wù)Kafka遷移指將生產(chǎn)與消費(fèi)消息的客戶端切換成連接新Kafka,部分還涉及將持久化的消息文件遷移到新的Kafka。主要涉及到以下2類場景:
業(yè)務(wù)上云且不希望業(yè)務(wù)有中斷。
在上云過程中,連續(xù)性要求高的業(yè)務(wù),需要平滑遷移,不能有長時(shí)間的中斷。
遷移準(zhǔn)備
1、配置網(wǎng)絡(luò)環(huán)境
Kafka實(shí)例分內(nèi)網(wǎng)地址以及公網(wǎng)地址兩種網(wǎng)絡(luò)連接方式。如果使用公網(wǎng)地址,則消息生成與消費(fèi)客戶端需要有公網(wǎng)訪問權(quán)限,并配置如下安全組。
2、創(chuàng)建Kafka實(shí)例
Kafka的規(guī)格不能低于原業(yè)務(wù)使用的Kafka規(guī)格。具體請(qǐng)參考創(chuàng)建Kafka實(shí)例。
3、創(chuàng)建Topic
在新的Kafka實(shí)例上創(chuàng)建與原Kafka實(shí)例相同配置的Topic,包括Topic名稱、副本數(shù)、分區(qū)數(shù)、消息老化時(shí)間,以及是否同步復(fù)制和落盤等。具體請(qǐng)參考創(chuàng)建Topic。
實(shí)施步驟(方案一:先遷生產(chǎn),再遷消費(fèi))
指先將生產(chǎn)消息的業(yè)務(wù)遷移到新的Kafka,原Kafka不會(huì)有新的消息生產(chǎn)。待原有Kafka實(shí)例的消息全部消費(fèi)完成后,再將消費(fèi)消息業(yè)務(wù)遷移到新的Kafka,開始消費(fèi)新Kafka實(shí)例的消息。
1、將生產(chǎn)客戶端的Kafka連接地址修改為新Kafka實(shí)例的連接地址。
2、重啟生產(chǎn)業(yè)務(wù),使得生產(chǎn)者將新的消息發(fā)送到新Kafka實(shí)例中。
3、觀察各消費(fèi)組在原Kafka的消費(fèi)進(jìn)度,直到原Kafka中數(shù)據(jù)都已經(jīng)被消費(fèi)完畢。
4、將消費(fèi)客戶端的Kafka連接地址修改為新Kafka實(shí)例的連接地址。
5、重啟消費(fèi)業(yè)務(wù),使得消費(fèi)者從新Kafka實(shí)例中消費(fèi)消息。
6、觀察消費(fèi)者是否能正常從新Kafka實(shí)例中獲取數(shù)據(jù)。
7、遷移結(jié)束。
本方案為業(yè)界通用的遷移方案,操作步驟簡單,遷移過程由業(yè)務(wù)側(cè)自主控制,整個(gè)過程中消息不會(huì)存在亂序問題,適用于對(duì)消息順序有要求的場景。但是該方案中需要等待消費(fèi)者業(yè)務(wù)直至消費(fèi)完畢,存在一個(gè)時(shí)間差的問題,部分?jǐn)?shù)據(jù)可能存在較大的端到端時(shí)延。
實(shí)施步驟(方案二:同時(shí)消費(fèi),后遷生產(chǎn))
指消費(fèi)者業(yè)務(wù)啟用多個(gè)消費(fèi)客戶端,分別向原Kafka和新Kafka實(shí)例消費(fèi)消息,然后將生產(chǎn)業(yè)務(wù)切到新Kafka實(shí)例,這樣能確保所有消息都被及時(shí)消費(fèi)。
1、啟動(dòng)新的消費(fèi)客戶端,配置Kafka連接地址為新Kafka實(shí)例的連接地址,消費(fèi)新Kafka實(shí)例中的數(shù)據(jù)。
說明:原有消費(fèi)客戶端需繼續(xù)運(yùn)行,消費(fèi)業(yè)務(wù)同時(shí)消費(fèi)原Kafka與新Kafka實(shí)例的消息。
2、修改生產(chǎn)客戶端,Kafka連接地址改為新Kafka實(shí)例的連接地址。3、重啟生產(chǎn)客戶端,將生產(chǎn)業(yè)務(wù)遷移到新Kafka實(shí)例中。
4、生產(chǎn)業(yè)務(wù)遷移后,觀察連接新Kafka實(shí)例的消費(fèi)業(yè)務(wù)是否正常。
5、等待原Kafka中數(shù)據(jù)消費(fèi)完畢,關(guān)閉原有消費(fèi)業(yè)務(wù)客戶端。
6、遷移結(jié)束。
遷移過程由業(yè)務(wù)自主控制。本方案中消費(fèi)業(yè)務(wù)會(huì)在一段時(shí)間內(nèi)同時(shí)消費(fèi)原Kafka和新Kafka實(shí)例。由于在遷移生產(chǎn)業(yè)務(wù)之前,已經(jīng)有消費(fèi)業(yè)務(wù)運(yùn)行在新Kafka實(shí)例上,因此不會(huì)存在端到端時(shí)延的問題。但在遷移生產(chǎn)的開始階段,同時(shí)消費(fèi)原Kafka與新Kafka實(shí)例,會(huì)導(dǎo)致部分消息之間的生產(chǎn)順序無法保證,存在消息亂序的問題。此場景適用于對(duì)端到端時(shí)延有要求,卻對(duì)消息順序不敏感的業(yè)務(wù)。
Kafka業(yè)務(wù)遷移詳情:點(diǎn)擊此處前往
實(shí)戰(zhàn)2|分布式消息中間件RabbitMQ業(yè)務(wù)遷移
RabbitMQ業(yè)務(wù)遷移是指將線下單機(jī)或集群實(shí)例遷移到華為云RabbitMQ實(shí)例。
方案架構(gòu)
提供如下兩種方案:
方案一:不遷移數(shù)據(jù),先切換生產(chǎn),再切換消費(fèi)。
方案二:先遷移數(shù)據(jù),然后同時(shí)切換生產(chǎn)和消費(fèi)。
實(shí)施步驟(方案一:不遷移數(shù)據(jù),先切換生產(chǎn),再切換消費(fèi))
針對(duì)線下單機(jī)或集群實(shí)例,在不遷移數(shù)據(jù)的情況下,首先將消息生產(chǎn)切換到線上實(shí)例,不再生產(chǎn)消息到線下實(shí)例,消費(fèi)方同時(shí)消費(fèi)線下以及線上實(shí)例。當(dāng)線下實(shí)例消息全部消費(fèi)完后,將消息消費(fèi)切換到線上實(shí)例,完成整個(gè)遷移過程。
通過以下方法,確認(rèn)線下實(shí)例是否消費(fèi)完成:
1、在RabbitMQ WebUI頁面查看,Overview視圖中,可消費(fèi)消息數(shù)(Ready)以及未確認(rèn)的消息數(shù)(Unacked)都為0時(shí),說明消費(fèi)完成。
2、調(diào)用API查看。
3、回顯信息中“messages_ready”和“messages_unacknowledged”都為0時(shí),說明消費(fèi)完成。
實(shí)施步驟(方案二:先遷移數(shù)據(jù),然后同時(shí)切換生產(chǎn)和消費(fèi))
1、在線下實(shí)例和線上實(shí)例都開啟shovel插件,線上實(shí)例開啟的方法請(qǐng)參見開啟shovel插件。然后,在線下實(shí)例的RabbitMQ WebUI頁面中配置shovel插件信息:Source為線下實(shí)例信息,Destination為線上實(shí)例信息,并在Source和Destination中設(shè)置需要同步的隊(duì)列。
2、調(diào)用API查看。
3、回顯信息中“messages_ready”和“messages_unacknowledged”都為0時(shí),說明遷移完成。
RabbitMQ業(yè)務(wù)遷移詳情:點(diǎn)擊此處前往
實(shí)戰(zhàn)3|分布式消息中間件RocketMQ業(yè)務(wù)遷移
RocketMQ業(yè)務(wù)遷移是指將其他廠商或者自建的RocketMQ遷移到華為云分布式消息服務(wù)RocketMQ版。
前提條件
1、配置網(wǎng)絡(luò)環(huán)境
分布式消息服務(wù)RocketMQ版實(shí)例分內(nèi)網(wǎng)地址以及公網(wǎng)地址兩種網(wǎng)絡(luò)連接方式。如果使用公網(wǎng)地址,則消息生產(chǎn)與消費(fèi)客戶端需要有公網(wǎng)訪問權(quán)限,并配置如下安全組。
2、購買分布式消息服務(wù)RocketMQ版實(shí)例,具體請(qǐng)參考購買RocketMQ實(shí)例。
實(shí)施步驟
1、遷移元數(shù)據(jù)至分布式消息服務(wù)RocketMQ版實(shí)例。
獲取其他廠商或自建RocketMQ實(shí)例的元數(shù)據(jù)。
進(jìn)入RocketMQ實(shí)例的安裝目錄,執(zhí)行以下命令,查詢集群名稱。
執(zhí)行以下命令,導(dǎo)出元數(shù)據(jù)。
在控制臺(tái)遷移元數(shù)據(jù)。
-登錄分布式消息服務(wù)RocketMQ版控制臺(tái)。
-單擊RocketMQ實(shí)例的名稱,進(jìn)入實(shí)例詳情頁面。
-在左側(cè)導(dǎo)航欄,選擇“元數(shù)據(jù)遷移”,進(jìn)入遷移任務(wù)列表頁面。
-單擊“創(chuàng)建遷移任務(wù)”,彈出“創(chuàng)建遷移任務(wù)”對(duì)話框。單擊“確定”。
-遷移完成后,在遷移任務(wù)列表頁面查看“任務(wù)狀態(tài)”。
-當(dāng)“任務(wù)狀態(tài)”為“遷移完成”,表示所有元數(shù)據(jù)都已成功遷移。
-當(dāng)“任務(wù)狀態(tài)”為“遷移失敗”,表示元數(shù)據(jù)中部分或全部元數(shù)據(jù)遷移失敗。單擊遷移任務(wù)名稱,進(jìn)入遷移任務(wù)詳情頁,在“遷移結(jié)果”中查看遷移失敗的Topic/消費(fèi)組名稱,以及失敗原因。
2、遷移生產(chǎn)消息至分布式消息服務(wù)RocketMQ版實(shí)例。
將生產(chǎn)客戶端的元數(shù)據(jù)連接地址改為分布式消息服務(wù)RocketMQ版實(shí)例的元數(shù)據(jù)連接地址,重啟生產(chǎn)業(yè)務(wù),使得生產(chǎn)者將新的消息發(fā)送到分布式消息服務(wù)RocketMQ版實(shí)例中。
3、遷移消費(fèi)消息至分布式消息服務(wù)RocketMQ版實(shí)例。
4、待消費(fèi)組中的消息消費(fèi)完之后,將消費(fèi)客戶端的元數(shù)據(jù)連接地址改為分布式消息服務(wù)RocketMQ版實(shí)例的元數(shù)據(jù)連接地址,重啟消費(fèi)業(yè)務(wù),使得消費(fèi)者從分布式消息服務(wù)RocketMQ版實(shí)例中消費(fèi)消息。
5、如果有多個(gè)RocketMQ實(shí)例需要遷移到同一個(gè)分布式消息服務(wù)RocketMQ版實(shí)例中,請(qǐng)依次進(jìn)行遷移。
RocketMQ業(yè)務(wù)遷移詳情:點(diǎn)擊此處前往
分布式消息中間件的應(yīng)用場景
分布式消息中間件是在分布式系統(tǒng)中,支持各個(gè)模塊/組件之間通信的中間件(軟件),這個(gè)中間件本身也是一個(gè)分布式系統(tǒng)。分布式消息中間件應(yīng)用場景有業(yè)務(wù)解耦、系統(tǒng)流控和事件驅(qū)動(dòng)等。
業(yè)務(wù)解耦:系統(tǒng)中的各個(gè)服務(wù)之間不需要有對(duì)方的存在,只需要發(fā)布消息即可——總會(huì)有合適的“人”來處理這個(gè)消息的。
系統(tǒng)流控:如果上游服務(wù)的吞吐能力高于下游服務(wù),上游洪峰可能會(huì)沖垮下游,此時(shí)消息中間件可以緩沖洪峰、堆積消息,在峰值過去后,再由下游服務(wù)慢慢消費(fèi)堆積的消息。
事件驅(qū)動(dòng):系統(tǒng)中各個(gè)服務(wù)之間可以通過消息傳遞的形式驅(qū)動(dòng)業(yè)務(wù),以流式的模型處理。
分布式消息中間件教程視頻
分布式消息服務(wù)DMS
04:57
分布式消息服務(wù)DMS
04:46
分布式消息服務(wù)DMS
03:08
1對(duì)1咨詢專屬顧問
華為云咨詢電話:950808或4000-955-988 轉(zhuǎn)1
華為云咨詢電話:950808或4000-955-988 轉(zhuǎn)1