Kafka的主题删除机制

By | 2020年9月14日

命令删除

在Kafka中当一个主题不再使用的时候,可以选择将其删除,以此来释放磁盘,文件句柄等资源,删除过程其实很简单,使用kafka-topics.sh脚本中的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命令删除主题

手动删除

我们还可以通过手动的方式来删除主题,主题中的元数据存储在zookeeper中的/brokers/topics和/config/topics路径下,主题中的消息数据存储在log.dir或log.dirs配置的路径下,我们只需要手动删除这些地方的内容即可,总共分三个步骤

第一步,删除zookeeper中的节点/config/topics/topic-delete

第二步,删除zookeeper中的节点/brokers/topics/topic-delete及其子节点

第三步,删除集群中所有与主题topic-delete有关的文件

删除主题是不可逆的操作。

发表评论

电子邮件地址不会被公开。 必填项已用*标注