我的kafka是CDH安装的默认目录 /opt/cloudera/parcels/KAFKA-4.1.0-1.4.1.0.p0.4
1、停止生产和消费程序。否则topic的offset信息会一直在broker更新。调用kafka delete命令则无法删除该topic。取消自动创建topic,设置 auto.create.topics.enable = false。
2、server.properties 设置 delete.topic.enable=true,否则调用kafka 的delete命令无法真正将topic删除,会显示(marked for deletion)
3、调用kafka命令:
查看topic是否存在
./bin/kafka-topics --list --zookeeper 【zookeeper server:port】|grep 【topic名称】
例:./bin/kafka-topics --list --zookeeper 192.168.1.215:2181|grep __consumer_offsets
删除topic
./bin/kafka-topics --delete --zookeeper 【zookeeper server:port】 --topic 【topic name】
例:./bin/kafka-topics --delete --zookeeper 192.168.1.215:2181 --topic __consumer_offsets
4、删除kafka存储目录
server.properties文件log.dirs配置(CDH中查找配置log.dirs),默认为 /app/kafka/data 相关topic的数据目录,如果kafka 有多个 broker,需要删除每个broker 的数据盘的topic的所有分区数据。
如果经过上面四步,还是无法正常删除topic,则需要对kafka在zookeeer的存储信息进行删除。
5、进入部署了zk的服务器,使用命令:
/opt/cloudera/parcels/CDH/lib/zookeeper/bin/zkCli.sh(路径)
bin/zkCli.sh -server 【zookeeper server:port】
登录到zk shell
topic所在的目录:ls /brokers/topics
删除topic命令:rmr /brokers/topics/【topic name】
如果topic 是被标记为 marked for deletion查看命令 ls /admin/delete_topics
删除topic命令(标记为marked for deletion):rmr /admin/delete_topics/【topic name】
(可选)删除topic在zk上面的消费节点记录、配置节点记录命令
rmr /consumers/【consumer-group】
rmr /config/topics/【topic name】
6、查看topic
./bin/kafka-topics.sh --list --zookeeper 【zookeeper server:port】
如果还能够查询到删除的topic,重启zk和kafka即可。