Kafka遷移指將生產與消費消息的(de)客戶端(duan)切換成連接新Kafka,部分還(huan)涉及(ji)將持久化(hua)的(de)消息文件(jian)遷移到新的(de)Kafka。主要(yao)涉及(ji)到以下2類場(chang)景:
- 業務上云且不希望業務有中斷。
在(zai)上云過程(cheng)中,連續性要求高的(de)業務,需要平滑遷移,不能(neng)有長(chang)時間(jian)的(de)中斷(duan)。
- 在云上變更業務部署
單(dan)AZ部(bu)署的Kafka實例,不(bu)具(ju)備(bei)AZ之(zhi)間的容災能力。用戶對可(ke)靠性要求提(ti)升后(hou),需(xu)要遷(qian)移(yi)到多AZ部(bu)署的實例上。
遷移準備
1、配置網絡環境
Kafka實例(li)分(fen)VPC內以及公(gong)網(wang)(wang)地(di)(di)址(zhi)兩種網(wang)(wang)絡連接方式。如果使(shi)用(yong)公(gong)網(wang)(wang)地(di)(di)址(zhi),則消(xiao)息生成與消(xiao)費客戶端需要有公(gong)網(wang)(wang)訪問權(quan)限,并配(pei)置(zhi)如下安全組。
表 安全組規則
| 方向 | 協議 | 端口 | 源地址 | 說明 |
|---|---|---|---|---|
| 入方向 | TCP | 9094 | 0.0.0.0/0 | 通過公網訪問Kafka(關閉SSL加密)。 |
| 入方向 | TCP | 9095 | 0.0.0.0/0 | 通過公網訪問Kafka(開啟SSL加密)。 |
2、創建Kafka實例
Kafka的規格不能低于原業務使用的Kafka規格。具體請參考購買Kafka實例。
3、創建Topic
在新的Kafka實例上創建與原Kafka實例相同配置的Topic,包括Topic名稱、副本數、分區數、消息老化時間,以及是否同步復制和落盤等。具體請參考創建Topic。
方案一:先遷生產,再遷消費
指先將生產(chan)消(xiao)息(xi)的(de)業務遷(qian)移到新(xin)的(de)Kafka,原Kafka不會有新(xin)的(de)消(xiao)息(xi)生產(chan)。待原有Kafka實(shi)例的(de)消(xiao)息(xi)全部消(xiao)費完成后,再(zai)將消(xiao)費消(xiao)息(xi)業務遷(qian)移到新(xin)的(de)Kafka,開始(shi)消(xiao)費新(xin)Kafka實(shi)例的(de)消(xiao)息(xi)。
1、將生產客(ke)戶(hu)端的(de)Kafka連(lian)接地址修改為(wei)新Kafka實例的(de)連(lian)接地址。
2、重啟生(sheng)產(chan)(chan)業務,使得生(sheng)產(chan)(chan)者將新的消息發(fa)送到(dao)新Kafka實例中。
3、觀察各消(xiao)費組在原Kafka的消(xiao)費進度,直到原Kafka中數(shu)據都已經被消(xiao)費完(wan)畢。
4、將消費客戶端(duan)的Kafka連接地址(zhi)修改為新(xin)Kafka實例(li)的連接地址(zhi)。
5、重啟消費業務,使得消費者從新Kafka實例中(zhong)消費消息。
6、觀察消費者是否能正(zheng)常從(cong)新(xin)Kafka實例中獲(huo)取數據。
7、遷移結束。
本方案為業界通用的遷移方案,操作步驟簡單,遷移過程由業務側自主控制,整個過程中消息不會存在亂序問題, 適用于對消息順序有要求的場景 。但是(shi)該方(fang)案中需要等待消費(fei)者業務(wu)直至消費(fei)完畢,存在(zai)一個(ge)時間差的(de)問題,部分(fen)數據可能存在(zai)較大的(de)端(duan)到端(duan)時延。
方案二:同時消費,后遷生產
指(zhi)消費者業務(wu)啟(qi)用多個消費客戶端,分別向原Kafka和(he)新(xin)Kafka實(shi)例消費消息,然后將生產業務(wu)切到新(xin)Kafka實(shi)例,這樣能確保所有消息都(dou)被及時消費。
1、啟動(dong)新(xin)的消費(fei)(fei)客戶端(duan),配置(zhi)Kafka連接(jie)地(di)(di)址為新(xin)Kafka實(shi)例的連接(jie)地(di)(di)址,消費(fei)(fei)新(xin)Kafka實(shi)例中(zhong)的數據。
說明原有消費客戶端需繼續運行,消費業務同時消費原Kafka與新Kafka實例的消息。
2、修改(gai)(gai)生產客戶(hu)端,Kafka連接(jie)地(di)址改(gai)(gai)為新Kafka實例(li)的(de)連接(jie)地(di)址。
3、重(zhong)啟生產(chan)客戶端,將生產(chan)業務遷移到新(xin)Kafka實例(li)中。
4、生產業務遷移(yi)后(hou),觀察連接新Kafka實例的消費業務是否正常。
5、等(deng)待原Kafka中數據消(xiao)費完畢(bi),關閉原有消(xiao)費業務客戶端。
6、遷移結束。
遷移過程由業務自主控制。本方案中消費業務會在一段時間內同時消費原Kafka和新Kafka實例。由于在遷移生產業務之前,已經有消費業務運行在新Kafka實例上,因此不會存在端到端時延的問題。但在遷移生產的開始階段,同時消費原Kafka與新Kafka實例,會導致部分消息之間的生產順序無法保證,存在消息亂序的問題。此場景 適用于對端到端時延有要求,卻對消息順序不敏感的業務 。
FAQ:如何(he)將(jiang)持久化數(shu)據也一起遷移(yi)
如果需要將(jiang)原Kafka的已消費數(shu)據(ju)(ju)也遷移(yi)到Kafka專享實例(li),可以(yi)使用(yong)開源工具MirrorMaker,模擬(ni)成原Kafka的消費客戶端(duan)(duan),以(yi)及新Kafka實例(li)的生產客戶端(duan)(duan),將(jiang)Kafka所有消息數(shu)據(ju)(ju)遷移(yi)到新的Kafka實例(li)。
需(xu)要注意(yi)的(de)是,天翼云Kafka實(shi)例為3副本存(cun)儲,因(yin)此建議實(shi)例存(cun)儲空間為原業(ye)務的(de)單副本消息存(cun)儲的(de)3倍。