前段時間公司的一個kafka集羣出現了故障,因爲以前準備不足,當時處理的比較慌亂。如:因爲kafka的集羣裏topic數量較多,而且每一個topic的分區數量和副本數量都不是同樣的,若是循序漸進的一個一個的去建立隊列,估計集羣恢復時黃瓜菜都涼了。python
對於kafka集羣出現故障,最快的處理辦法,就是重建集羣,而後在新的集羣上將隊列相關信息所有按原集羣重建一遍。本人利用端午假期,寫了一個python腳本(這是第二次擼python,能用就好,各位要求不要過高哈),能夠實現一鍵功能。blog
1.首先將此腳本(topic.py),放到kafka的bin目錄下;隊列
2.執行python topic.py命令get
3.輸入原集羣的zookeeper地址,回車kafka
4.輸入新集羣的zookeeper地址,回車input
5.控制檯輸出topic建立相關的信息,檢查新集羣,能夠發現舊集羣中全部的topic所有按原樣從新在新集羣中建立了一遍it
topic.py腳本以下:io
import os from sys import stdin import re print 'input source kafka zookeeper address. eg:127.0.0.1:2181' value = stdin.readline().replace("\n", "") print 'input target kafka zookeeper address. eg:127.0.0.1:2181' target = stdin.readline().replace("\n","") value2 = './kafka-topics.sh --describe --zookeeper ' +value value2 = value2+' | grep ^Topic' output = os.popen(value2) text = output.readline() while (text ): strs = text.split() outtemp = os.popen('./kafka-topics.sh --create --topic '+strs[0].replace("Topic:","") +' --partitions '+strs[1].replace("PartitionCount:","") + ' --replication-factor ' +strs[2].replace("ReplicationFactor:","")+ ' --if-not-exists --zookeeper ' + target) print outtemp.readline() text = output.readline() outtemp.close() output.close()