赞
踩
在Kafka中当一个主题不再使用的时候,可以选择将其删除,以此来释放磁盘,文件句柄等资源,删除过程其实很简单,使用kafka-topics.sh脚本中的delete指令就可以。
bin/kafka-topics.sh --zookeeper localhost:2181/kafka --delete --topic topic-delete
在删除完毕后,会有相应的提示信息,提示信息与broker端配置参数delete.topic.enable有关,必须将delete.topic.enable参数配置为true才能删除主题,该参数的默认值就是true,如果配置为false,那么删除主题的操作将会被忽略。
如果要删除的主题是Kafka内部主题,那么删除时就会报错,截至Kafka2.0.0,Kafka的内部主题一共有两个,__consumer_offsets,__transaction_state
。
使用kafka-topics.sh脚本删除主题的行为本质上只是在zookeeper中的/admin/delete_topics路径下创建一个与待删除主题同名的节点,以此标记该主题为待删除的状态。与创建主题相同的是,真正删除主题的动作也是由Kafka的控制器负责完成的。
我们可以直接通过zookeeper的客户端来删除主题,如使用zkCli.sh命令删除主题
create /admin/delete_topics/topic-delete ""
我们还可以通过手动的方式来删除主题,主题中的元数据存储在zookeeper中的/brokers/topics和/config/topics路径下,主题中的消息数据存储在log.dir或log.dirs配置的路径下,我们只需要手动删除这些地方的内容即可,总共分三个步骤
第一步,删除zookeeper中的节点/config/topics/topic-delete
rmr /config/topics/topic-delete
第二步,删除zookeeper中的节点/brokers/topics/topic-delete及其子节点
delete /brokers/topics/topic-delete
第三步,删除集群中所有与主题topic-delete有关的文件
集群一:rm -rf /data/kafka-logs/topic-delete*
集群二:rm -rf /data/kafka-logs/topic-delete*
集群三:rm -rf /data/kafka-logs/topic-delete*
删除主题是不可逆的操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。