Kafka遷移(yi)指將生產與消(xiao)費(fei)消(xiao)息的(de)(de)客戶端切換成連接新(xin)Kafka,部分還涉(she)及將持(chi)久化的(de)(de)消(xiao)息文件遷移(yi)到(dao)新(xin)的(de)(de)Kafka。主要涉(she)及到(dao)以下(xia)2類場景:
- 業務上云且不希望業務有中斷。
在(zai)上云過程(cheng)中,連續性要求高(gao)的(de)業務,需要平滑遷移,不能有長時間的(de)中斷。
- 在云上變更業務部署。
單(dan)AZ部署的Kafka實(shi)例,不具備(bei)AZ之間的容(rong)災能力(li)。用戶(hu)對可(ke)靠(kao)性(xing)要(yao)求提(ti)升后,需要(yao)遷移到多(duo)AZ部署的實(shi)例上。
約束與限制
- 使用Smart Connect遷移業務,會對源端Kafka進行消費,對目標端Kafka進行生產,會占用源端和目標端Kafka的帶寬。
- 出于性能考慮,Smart Connect實時同步源端和目標端的數據,但是消費進度是通過批處理同步的,可能會導致源端和目標端每個分區的消費進度存在0-100之間的差異。
遷移準備
- 配置網絡環境。
Kafka實例分(fen)內網(wang)地址(zhi)以及公(gong)網(wang)地址(zhi)兩(liang)種網(wang)絡連(lian)接(jie)方式。如果使用公(gong)網(wang)地址(zhi),則消息生成與消費客戶端需要有公(gong)網(wang)訪問權(quan)限,并配置如下(xia)安全組。
表1-1 安全(quan)組規則(ze)
| 方向 | 協議 | 端口 | 源地址 | 說明 |
|---|---|---|---|---|
| 入方向 | TCP | 9094 | Kafka客戶端所在的IP地址或地址組 | 通過公網訪問Kafka(明文接入)。 |
| 入方向 | TCP | 9095 | Kafka客戶端所在的IP地址或地址組 | 通過公網訪問Kafka(密文接入)。 |
- 創建目標Kafka實例。
目標Kafka的規格不能低于原業務使用的Kafka規格。具體請參考創建Kafka實例。
- 在目標Kafka實例中創建Topic。
在目標Kafka實例上創建與原Kafka實例相同配置的Topic,包括Topic名稱、副本數、分區數、消息老化時間,以及是否同步復制和落盤等。具體請參考創建Kafka Topic。
遷移方案一:先遷生產,再遷消費
先將(jiang)生產消(xiao)(xiao)息的(de)業務遷移到新的(de)Kafka,原Kafka不會有新的(de)消(xiao)(xiao)息生產。待原有Kafka實(shi)(shi)例的(de)消(xiao)(xiao)息全部消(xiao)(xiao)費完(wan)成(cheng)后,再將(jiang)消(xiao)(xiao)費消(xiao)(xiao)息業務遷移到新的(de)Kafka,開始消(xiao)(xiao)費新Kafka實(shi)(shi)例的(de)消(xiao)(xiao)息。
本方案為業界通用的遷移方案,操作步驟簡單,遷移過程由業務側自主控制,整個過程中消息不會存在亂序問題, 適用于對消息順序有要求的場景 。但是該方案中需(xu)要(yao)等待消(xiao)(xiao)費者業(ye)務直至(zhi)消(xiao)(xiao)費完畢,存(cun)在一個(ge)時間差的問題(ti),部分數據可能存(cun)在較大的端(duan)到端(duan)時延。
1、將生產客(ke)戶(hu)端(duan)的(de)Kafka連接(jie)地址(zhi)(zhi)修改為(wei)新Kafka實例的(de)連接(jie)地址(zhi)(zhi)。
2、重啟生產業務,使得生產者將(jiang)新的消息(xi)發送到新Kafka實(shi)例中(zhong)。
3、觀察(cha)各消費(fei)組在原Kafka的(de)消費(fei)進度(du),直到(dao)原Kafka中數據都已經被消費(fei)完畢。
4、將消費(fei)客戶端的(de)Kafka連接(jie)地址修改(gai)為新(xin)Kafka實例的(de)連接(jie)地址。
5、重(zhong)啟消費(fei)業(ye)務,使得消費(fei)者(zhe)從(cong)新Kafka實例中消費(fei)消息(xi)。
6、觀察(cha)消費者(zhe)是否能(neng)正常從新Kafka實例(li)中獲(huo)取(qu)數據。
7、遷移結束。
----結束
遷移方案二:同時消費,后遷生產
消(xiao)費(fei)者(zhe)業務啟用多個(ge)消(xiao)費(fei)客戶端,分別向原Kafka和新Kafka實例(li)消(xiao)費(fei)消(xiao)息,然后將生(sheng)產業務切(qie)到新Kafka實例(li),這樣能(neng)確保所有消(xiao)息都被及時消(xiao)費(fei)。
本方案中消費業務會在一段時間內同時消費原Kafka和新Kafka實例。由于在遷移生產業務之前,已經有消費業務運行在新Kafka實例上,因此不會存在端到端時延的問題。但在遷移生產的開始階段,同時消費原Kafka與新Kafka實例,會導致部分消息之間的生產順序無法保證,存在消息亂序的問題。此場景 適用于對端到端時延有要求,卻對消息順序不敏感的業務 。
1、啟動新(xin)的消(xiao)費客(ke)戶端,配置Kafka連接地(di)址為新(xin)Kafka實例(li)(li)的連接地(di)址,消(xiao)費新(xin)Kafka實例(li)(li)中的數據(ju)。
原有消(xiao)費客戶端需繼續運行,消(xiao)費業務同(tong)時(shi)消(xiao)費原Kafka與(yu)新Kafka實例的消(xiao)息(xi)。
2、修改生產(chan)客戶端(duan),Kafka連接地(di)址(zhi)改為新Kafka實例的連接地(di)址(zhi)。
3、重啟生(sheng)產客(ke)戶(hu)端,將生(sheng)產業務遷移到新Kafka實例中。
4、生產(chan)業(ye)務(wu)遷(qian)移后,觀察連接新Kafka實例(li)的消費(fei)業(ye)務(wu)是否正常。
5、等待原Kafka中(zhong)數據消費完畢,關閉原有消費業(ye)務客戶端。
6、遷移結束。
----結束
遷移方案三:先遷消費,再遷生產
首先通過Smart Connect同步兩個(ge)Kafka的消息,其次將消費端遷(qian)移到新(xin)Kafka,最后(hou)將生(sheng)產端遷(qian)移到新(xin)Kafka。
本方案依賴于(yu)Smart Connect,Smart Connect實時(shi)同步源端(duan)(duan)(duan)和目(mu)標端(duan)(duan)(duan)的(de)(de)數據,但是(shi)消(xiao)(xiao)費進(jin)度是(shi)通過(guo)批處理同步的(de)(de),可能會導致源端(duan)(duan)(duan)和目(mu)標端(duan)(duan)(duan)每個分區的(de)(de)消(xiao)(xiao)費進(jin)度存在0-100之間的(de)(de)差異,存在少量重(zhong)復消(xiao)(xiao)費問題。此場景適用于(yu)生產端(duan)(duan)(duan)不可停(ting)止,端(duan)(duan)(duan)到端(duan)(duan)(duan)有時(shi)延要(yao)求,但是(shi)可以兼(jian)容少量重(zhong)復消(xiao)(xiao)費的(de)(de)業務。
1、創建Kafka數據復制的Smart Connect任務,用于同步兩個Kafka的消息。具體步驟請參見配置Kafka間的數據復制。
2、在Kafka控制臺的“消息查詢”頁面,查看兩個Kafka的最新消息是否一致,確認兩個Kafka的同步進度是否一致。具體步驟請參見查看Kafka消息。
- 是,執行第3步。
- 否,在監控頁面查看兩個Kafka的“Kafka每分鐘同步數據量”是否正常,如果正常,先等待兩個Kafka的同步進度一致,然后執行第3步。
3、將消費客戶(hu)端的(de)Kafka連接(jie)地址修(xiu)改為新Kafka實例的(de)連接(jie)地址。
4、重啟消費業務,使(shi)得(de)消費者從(cong)新Kafka實(shi)例中消費消息(xi)。
5、觀察(cha)消費(fei)者是否能正常從新Kafka實例中獲取數據。
6、修(xiu)改生產客(ke)戶端,Kafka連接地址改為新Kafka實例的連接地址。
7、重(zhong)啟生(sheng)(sheng)產客戶端,將生(sheng)(sheng)產業務遷移(yi)到新(xin)Kafka實例(li)中。
8、生(sheng)產業務遷移后,觀察連接新Kafka實例的消費(fei)業務是否正常。
9、遷移結束。
----結束
常見問題:如何將持久化數據也一起遷移
如果需要將原Kafka的已消費數據也遷移到Kafka實例,可以使用Smart Connect工具,模擬成原Kafka的消費客戶端,以及新Kafka實例的生產客戶端,將Kafka所有消息數據遷移到新的Kafka實例,具體步驟請參考配置Kafka間的數據復制。
需(xu)要注意的是(shi),云上Kafka實例為3副本存(cun)儲(chu)(chu),因此建議(yi)實例存(cun)儲(chu)(chu)空間為原業務的單副本消(xiao)息存(cun)儲(chu)(chu)的3倍。