您的位置:首页 > 运维架构

彻底删除Kafka中的topic

2018-02-09 11:18 411 查看
1、删除kafka存储目录(server.properties文件log.dirs配置,默认为"/tmp/kafka-logs")相关topic目录2、Kafka 删除topic的命令是:   ./bin/kafka-topics  --delete --zookeeper 【zookeeper server】  --topic 【topic name】   如果kafaka启动时加载的配置文件中server.properties没有配置delete.topic.enable=true,那么此时的删除并不是真正的删除,而是把topic标记为:marked for deletion   你可以通过命令:./bin/kafka-topics --zookeeper 【zookeeper server】 --list 来查看所有topic  此时你若想真正删除它,可以登录zookeeper客户端:  命令:./bin/zookeeper-client  找到topic所在的目录:ls /brokers/topics  找到要删除的topic,执行命令:rmr /brokers/topics/【topic name】即可,此时topic被彻底删除。 另外被标记为marked for deletion的topic你可以在zookeeper客户端中通过命令获得:ls /admin/delete_topics/【topic name】,如果你删除了此处的topic,那么marked for deletion 标记消失zookeeper 的config中也有有关topic的信息: ls /config/topics/【topic name】暂时不知道有什么用 3、创建zk节点信息(解决leader:none问题)    首先执行命令:bin/kafka-topics.sh --zookeeper zkhost:port --describe --topic topic_name,会发现这时leader为none,isr为空。但Replicas的数据都还在,若Replicas也没有数据,那么下面的方法就不适合你了[哈哈哈哈哈哈...]。

然后在zookeeper的client里面执行下面的代码即可:
create /kafka/brokers/topics/$topic_name/partitions null

create /kafka/brokers/topics/$topic_name/partitions/0 null
create /kafka/brokers/topics/$topic_name/partitions/1 null
...
create /kafka/brokers/topics/$topic_name/partitions/0/state {"controller_epoch":38,"leader":1,"version":1,"leader_epoch":0,"isr":[1,3,4]}
create /kafka/brokers/topics/$topic_name/partitions/1/state {"controller_epoch":38,"leader":2,"version":1,"leader_epoch":0,"isr":[2,4,5]}
...
其中$topic_name替换为需要修复的topic name;controller_epoch可以通过在zkCli.sh里面执行get /kafka/controller_epoch命令得到;version默认1即可;leader_epoch默认0即可;isr的值和前面命令中得到的Replicas值一致即可;然后最重要的leader的值等于Replicas数组的第1个值即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: