Kafka删除主题详解

背景

在kafka的使用、测试过程中,可能老是会遇到想要删除某个主题的需求,但是由于对其内部机制不够了解,总是无法有效的删除主题。今天这篇文章详细讨论如何彻底的删除一个主题。

删除主题的前提

在kafka的broker端的配置参数中有这样一个参数:delete.topic.enable,必须将它设置为true才能够删除kafka主题。这个参数的默认值是true。如果配置为false那么删除主题的命令将会被忽略。

kafka仅支持删除用户自定义主题,kafka的内置主题,如保存偏移量的主题__consumer_offset_不允许被删除,如果执行删除命令会报错。

对于不存在的主题如果删除同样会抛出错误信息

使用删除主题命令的本质

使用kafka-topics.sh脚本删除主题的行为本质上只是在zk中的/admin/delete_topics路径下创建一个待删除主题的同名节点,以此标记该主题的待删除状态。所以我们可以在zk操作删除主题

当我们执行下面kafka删除主题的命令:

$>./bin/kafka-topics --delete --topic test-1 --zookeeper master:2181/kafka

再查询kafka的主题:

[root@localhost kafka_2.11-0.10.2.2]$> ./bin/kafka-topics.sh --list --zookeeper localhost:2181/kafka   
__consumer_offsets
my-topic
test-1 - marked for deletion #发现主题仅仅是标记删除了

那么上面的删除命令到底发生了什么呢?

执行上述删除主题命令以后,会在zookeeper的/admin/delete_topics路径下创建一个与删除主题同名的节点

[zk: localhost:2181(CONNECTED) 4] ls /kafka/admin/delete_topics
[test-1]

了解原理以后,我们在zk的该目录下手动创建要删除的节点,看一下会发生什么

[zk: localhost:2181(CONNECTED) 6] create /kafka/admin/delete_topics/test-2 ""
Created /kafka/admin/delete_topics/test-2 #手动创建要删除的节点成功

此时再次查询kafka的主题信息

[root@localhost kafka_2.11-0.10.2.2]$ ./bin/kafka-topics.sh --list --zookeeper localhost:2181/kafka
__consumer_offsets
my-topic
test-1 - marked for deletion
test-2 - marked for deletion #发现使用zk命令删除的节点与test-1是同样的效果

如何彻底删除一个kafka主题

通过上述说明我们已经知道使用kafka的删除命令是无法做到真正删除一个已经存在的主题的,那么该如何彻底删除主题呢?

一个kafka主题包含两部分内容:存储在zk中的元数据信息,和存储在磁盘log.dir或者logs.dir下的主题实际存储数据。

前者存储在zk的/kafka/config/topics//kafka/brokers/topics下,只需要删除zk中对应主题的节点即可(以test-1)为例

[zk: master:2181/kafka (CONNECTED) 1] rmr /config/topics/test-1
[zk: master:2181/kafka (CONNECTED) 2] rmr /brokers/topics/test-1

后者找到kafka配置的数据目录,将其删除即可

#该文件的目录配置在server.properties中
$>rm -rf /opt/modules/kafka-logs/test-1

执行上述操作以后,test-1主题的所有数据就被彻底删掉了,我们再进行查询发现已经没有test-1了

[root@localhost kafka_2.11-0.10.2.2]# ./bin/kafka-topics.sh --list --zookeeper localhost:2181/kafka
__consumer_offsets
my-topic
test-2 - marked for deletion

微信公众号:大数据报文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值