前段时间公司的一个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()