kafka的遷移乾貨

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

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

 

經過查詢官網,並沒有直接切換的命令,當前版本是kafka 0.8.1,  說是0.8.2才提供老機器的退役功能.json

 

不過不要緊, 咱們有一個變通的方法:服務器

kafka提供了修改複製因子的方法, 咱們能夠將她的複製目標機器改爲新的節點.  這樣全部發往老節點的數據都會被轉移到新節點去.session

等你將發送者的API修改後,讓他目標指向新機器,  遷移工做就所有完成.測試

 

具體步驟以下:spa

1.在新節點上搭建kafka服務orm

原先我有2臺機器, broker.id分別爲1和2kafka

如今我新機器上broker.id分別設置爲3和4it

 

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.大功告成

相關文章
相關標籤/搜索