kafka如何彻底删除topic及数据
前⾔:
删除kafka topic及其数据,严格来说并不是很难的操作。但是,往往给kafka 使⽤者带来诸多问题。项⽬组之前接触过多个开发者,发现都会偶然出现⽆法彻底删除kafka的情况。本⽂总结多个删除kafka topic的应⽤场景,总结⼀套删除kafka topic的标准操作⽅法。
step1:
如果需要被删除topic 此时正在被程序 produce和consume,则这些⽣产和消费程序需要停⽌。
因为如果有程序正在⽣产或者消费该topic,则该topic的offset信息⼀致会在broker更新。调⽤kafka delete命令则⽆法删除该topic。
同时,需要设置 able = false,默认设置为true。如果设置为true,则produce或者fetch 不存在的topic也会⾃动创建这个topic。这样会给删除topic带来很多意向不到的问题。
所以,这⼀步很重要,必须设置able = false,并认真把⽣产和消费程序彻底全部停⽌。
step2:
server.properties 设置 able=true
如果没有设置 able=true,则调⽤kafka 的delete命令⽆法真正将topic删除,⽽是显⽰(marked for deletion)
step3:
调⽤命令删除topic:
./bin/kafka-topics --delete --zookeeper 【zookeeper server:port】 --topic 【topic name】
step4:
删除kafka存储⽬录(server.properties⽂件log.dirs配置,默认为"/data/kafka-logs")相关topic的数据⽬录。
注意:如果kafka 有多个 broker,且每个broker 配置了多个数据盘(⽐如 /data/kafka-logs,/data1/kafka-logs ...),且topic也有多个分区和replica,则需要对所有broker的所有数据盘进⾏扫描,删除该topic的所有分区数据。
⼀般⽽⾔,经过上⾯4步就可以正常删除掉topic和topic的数据。但是,如果经过上⾯四步,还是⽆法正常删除topic,则需要对kafka在zookeeer的存储信息进⾏删除。具体操作如下:
(注意:以下步骤⾥⾯,kafka在zk⾥⾯的节点信息是采⽤默认值,如果你的系统修改过kafka在zk⾥⾯的节点信息,则需要根据系统的实际情况到准确位置进⾏操作)
step5:
⼀台部署了zk的服务器,使⽤命令:
bin/zkCli.sh -server 【zookeeper server:port】
登录到zk shell,然后到topic所在的⽬录:ls /brokers/topics,到要删除的topic,然后执⾏命令:
rmr /brokers/topics/【topic name】
即可,此时topic被彻底删除。
如果topic 是被标记为 marked for deletion,则通过命令 ls /admin/delete_topics,到要删除的topic,然后执⾏命令:
rmr /admin/delete_topics/【topic name】
备注:
⽹络上很多其它⽂章还说明,需要删除topic在zk上⾯的消费节点记录、配置节点记录,⽐如:
rmr /consumers/【consumer-group】
rmr /config/topics/【topic name】
kafka命令其实正常情况是不需要进⾏这两个操作的,如果需要,那都是由于操作不当导致的。⽐如step1停⽌⽣产和消费程序没有做,step2没有正确配置。也就是说,正常情况下严格按照step1 -- step5 的步骤,是⼀定能够正常删除topic的。
step6:
完成之后,调⽤命令:
./bin/kafka-topics.sh --list --zookeeper 【zookeeper server:port】
查看现在kafka的topic信息。正常情况下删除的topic就不会再显⽰。但是,如果还能够查询到删除的topi
c,则重启zk和kafka即可。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。