kafka的遷移干貨


隨着業務的發展, 服務器所在網段/機群不允許kafka繼續保留在那, 需要移動到先機器上.

哎呀上面是廢話,總的說就是: 2台老kafka不要了,數據要遷移到新的2台kafka上面.要求數據不丟失

 

通過查詢官網,並無直接切換的命令,當前版本是kafka 0.8.1,  說是0.8.2才提供老機器的退役功能.
 
不過沒關系, 我們有一個變通的方法:
kafka提供了修改復制因子的方法, 我們可以將她的復制目標機器改成新的節點.  這樣所有發往老節點的數據都會被轉移到新節點去.
等你將發送者的API修改后,讓他目標指向新機器,  遷移工作就全部完成.
 
具體步驟如下:
1.在新節點上搭建kafka服務
原先我有2台機器, broker.id分別為1和2
現在我新機器上broker.id分別設置為3和4
 
2.啟動所有kafka 服務
 
3.確認要移動的topics
  
kafka-topics.sh --list --zookeeper 192.168.103.47:2181  查看所有主題
 
復制這些topic,並寫成如下格式的文件, 命名為  topics-to-move.json
{"topics": [
 {"topic": "fortest1"},
 {"topic": "fortest2"},
 {"topic": "fortest3"}
 ],
 "version":1
}
 
4.生成移動腳本
 
運行bin/kafka-reassign-partitions.sh --zookeeper 192.168.103.47:2181 --topics-to-move-json-file  topics-to-move.json --broker-list "3,4" --generate 
 
其中3,4是你的新節點的broker.id
 
這樣就會生成一串新的json數據
{"version":1,"partitions":[{"topic":"fortest1","partition":0,"replicas":[3,4]},其他部分省略}
 
將這一串json寫入新文件 reassignment-node.json
 
 
5.這時候,萬事俱備, 開始遷移
bin/kafka-reassign-partitions.sh --zookeeper 192.168.103.47:2181 --reassignment-json-file  reassignment-node.json --execute
 
6.適當時候, 運行如下命令,查看運行結果
 
bin/kafka-reassign-partitions.sh --zookeeper 192.168.103.47:2181 --reassignment-json-file reassignment-node.json --verify
 
 
 
假設出現
ERROR: Assigned replicas (3,4,0,1) don't match the list of replicas for reassignment (3,4) for partition [mpt-session,1]
這樣的錯誤, 他並不是真的出錯,而是指目前仍在復制數據中.
再過一段時間再運行verify命令,他就會消失(加入完成拷貝)
 
 
 
7.數據完成遷移后, 老的服務先別停.
8.修改所有客戶端producer或者consumer連接指向新節點.
9.測試正常后, 關閉老節點
10.大功告成
 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM