kafka數據遷移

  場景:老集羣將不再使用,上邊的kafka集羣中的數據要導入到新的集羣的kafka中



倒入步驟(例如按照天的topic遷移):

  因爲kafka默認只保留7天的數據,所以只遷移近7天的數據

  1. 首先使用kafka-topic.sh客戶端列出kafka集羣上所有topic

  2. 取出近7天的topic名稱,寫入到一個txt文本中,每個topic名稱一行

  3. 導出:for i in $(cat txt);do kafka-console-consumer.sh --zookeeper=... --topic=$i --from-beginning >>$i.txt;done

  4. 導入: 先創建topic:kafka-topic.sh create topic

    cat $i.txt | kafka-conso-producer.sh --broker-list=... --topic=$i 


第二種方案不常用:

借鑑:http://www.cnblogs.com/dycg/p/3922352.html

具體步驟如下:

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.測試正常後, 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章