kafka如何彻底删除topic及数据

前言:

删除kafka topic及其数据,严格来说并不是很难的操作。但是,往往给kafka 使用者带来诸多问题。项目组之前接触过多个开发者,发现都会偶然出现无法彻底删除kafka的情况。本文总结多个删除kafka topic的应用场景,总结一套删除kafka topic的标准操作方法。

step1:

如果需要被删除topic 此时正在被程序 produce和consume,则这些生产和消费程序需要停止。

因为如果有程序正在生产或者消费该topic,则该topic的offset信息一致会在broker更新。调用kafka delete命令则无法删除该topic。

同时,需要设置 auto.create.topics.enable = false,默认设置为true。如果设置为true,则produce或者fetch 不存在的topic也会自动创建这个topic。这样会给删除topic带来很多意向不到的问题。

所以,这一步很重要,必须设置auto.create.topics.enable = false,并认真把生产和消费程序彻底全部停止。

step2:

server.properties 设置 delete.topic.enable=true

如果没有设置 delete.topic.enable=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】

其实正常情况是不需要进行这两个操作的,如果需要,那都是由于操作不当导致的。比如step1停止生产和消费程序没有做,step2没有正确配置。也就是说,正常情况下严格按照step1 -- step5 的步骤,是一定能够正常删除topic的。

step6:

完成之后,调用命令:

./bin/kafka-topics.sh --list --zookeeper 【zookeeper server:port】

查看现在kafka的topic信息。正常情况下删除的topic就不会再显示。

但是,如果还能够查询到删除的topic,则重启zk和kafka即可。

 

删除 Kafka 中的一个 topic数据,你可以按照以下步骤进行操作: 1. 停止 Kafka 服务:首先,确保 Kafka 服务已经停止运行,以免在删除数据时出现意外情况。 2. 删除 topic 数据目录:在 Kafka 的配置文件中,你可以找到 `log.dirs` 参数,该参数指定了 Kafka 存储 topic 数据的目录。默认情况下,数据目录位于 Kafka 安装目录下的 `data` 文件夹中。你可以使用文件管理器或命令行工具进入该目录,并删除与你想要删除数据topic 相关的文件夹。 3. 清理 ZooKeeper 数据Kafka 使用 ZooKeeper 来保存元数据信息。在删除 topic 数据后,你需要清理掉 ZooKeeper 中与该 topic 相关的元数据。你可以使用 Kafka 提供的 `kafka-topics.sh` 脚本来删除 ZooKeeper 中的元数据。 在 Kafka 安装目录下找到 `bin` 文件夹,并进入该文件夹。然后使用以下命令删除 topic 的元数据: ``` ./kafka-topics.sh --zookeeper <ZooKeeper 地址> --delete --topic <要删除topic 名称> ``` 其中,`<ZooKeeper 地址>` 是你的 ZooKeeper 服务器地址,`<要删除topic 名称>` 是你要删除topic 的名称。 4. 启动 Kafka 服务:完成上述步骤后,你可以重新启动 Kafka 服务,这样已经删除topic 数据就会彻底清除。 请注意,删除 topic 数据是一个不可逆的操作,一旦删除数据将无法恢复,请谨慎操作并确保你真正需要删除这些数据
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值