前言: 利用kafka命令删除topic不成功。
kafka-topics.sh --zookeeper *.192.0.128:2181/kafka_yes --delete --topic test
原因&解决方式
- 配置文件未将delete.topic.enable=true,导致删除命令未及时生效;
解决方式:
第一种:找到conf目录下server.properties配置文件,修改delete.topic.enable=true,代表删除立即生效;
[root@node3a1 config]$ vi server.properties delete.topic.enable=true 修改配置后,需要重启kafka服务;
如果是cloudera 页面管理的kafka配置,需要点击delete.topic.enable 这个配置打对号
第二种:不修改delete.topic.enable=true配置文件的情况下,删除命令执行后,重启kafka服务,也可以使主题删除成功;
- 配置文件已经设置delete.topic.enable=true,删除命令执行后,还能看到topic名称;
原因:生产者和消费者并未停止执行,导致虽然删除了topic,但是生产者或者消费者运行时,立刻重新创建了topic,视觉显示删除未成功,此时可以通过消费topic内的数据进行查看,如果之前是带有数据的topic,在执行删除命令后,发现topic内的数据已经消失了。
解决方式:先停止生产者和消费者的运行,再执行kafka删除命令; - 配置文件已经设置delete.topic.enable=true 生产者,消费者已经停止,kafka topic 名称依然存在,无法删除,删除时显示topic marked delete 、describe topic 时 leader = -1 、isr 为空、底层数据已经被删除。
解决方法:
1> zookeeper 底层删除 topic ,
打开ZKcli.sh -server node0a128:2181 、
ls /kafka_yes/brokers/topics 可以看到topic 名称
rmr /kafka_yes/brokers/topics/"topicname" 删除topic
ls /kakfa_yes/admin/deletetopic 可以看到要删除的topic
2> zookeeper 底层无法删除
当底层无法删除topic时,删除时报 未认证
!!!有个根本的解决方法有点暴力但非常好使,使用时请慎重
更改kafka在zookeeper的根目录路径,和kafka 数据磁盘存放路径。
- 更改前一定要看看有没有topic 有没有堆积 当然紧急的情况下也就不用考虑
- 更改前要保证kafka自动创建topic auto.create.topic = true,cloudera中一般默认自动创建,更改其创建的分区数,和副本数目然后重启kafka
- 这个类似 重新创建了个集群,打开生产者与消费者就可以了