kafka删除topic

删除kafka topic及其数据,严格来说并不是很难的操作。但是,往往给kafka 使用者带来诸多问题,发现都会偶然出现无法彻底删除kafka的情况。
前提:kafka必须配置参数delete.topic.enable=true

  1. 如果需要被删除topic 此时正在被程序 produce和consume,则这些生产和消费程序需要停止
  2. 执行删除命令
./bin/kafka-topics --delete --zookeeper xxxx:2181 --topic topicName
  1. 执行查询命令
    ./bin/kafka-topics.sh --list --zookeeper xxxx:2181
    如果topicName正常被删除,那说明正常删除,如果被标记为--marked for deletion,说明还有对这个topic的引用

另外如果topic被标记为--marked for deletion,这时如果去zookeeper的/brokers/topics/节点下删除这个topic(不建议这样做),虽然真的在kafka中查不到这个topic了,但是可能会引出很多意想不到的异常,例如常见的:

WARN Error while fetching metadata with correlation id 0 : {test=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)

上面这个错误就是异常topic引起的,当producer或consumer向这个topic发送数据/读取数据时不会报错,也什么都不提示,只有打印log4j日志才可以看到上面的错误信息,此时最简单的方法就是重建topic。

还有种方法是重启zookeeper和kafka,这时topic应该就恢复正常了,可是线上的kafka和zk怎么会让你随便重启呢,所以最好的方法还是重建topic,避免这个问题的方法就是要正确删除topic。
###重点

  • 不到万不得已,千万不要动zk里的数据,因为我在实际线上中发现有时即使删了zk里的topic数据,但kafka内存中还是存在那个topic的,这是可能会引发意想不到的错误,严重的可能导致kafka集群挂掉,慎重!!
  • 用命令删除后就别再动了(标记状态),等kafka真正检测到这个topic不用时(比如数据彻底过了保质期)kafka会自行删除这个topic
  • 还有一种情况也是不能删除topic的,就是假如要删除的topic有分区或副本分别分布在broker0、1、2上,当broker0宕机,此时broker0上有这个topic的分区和副本,这时是删不掉的,只有把broker0启动,topic会自动删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值