kafka的topic删除

  • Post author:
  • Post category:其他


删除kafka的topic,出现如下提示

[root@mini1 ~]#kafka-topics.sh --delete --zookeeper mini1:2181 --topic test
Topic test is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.

查询可知,kafka删除topic的过程如下:

在这里插入图片描述

如果在在server.properties中添加:

delete.topic.enable=true

此时使用

bin/kafka-topics.sh --zookeeper zk_host:port/chroot --delete --topic test-topic

那么,命令返回后,zookeeper的/admin/delete_topics目录下会新创建一个临时节点test-topic.

删除线程执行删除操作的真正逻辑是:

  1. 它首先会给当前所有broker发送更新元数据信息的请求,告诉这些broker说这个topic要删除了,你们可> > 以把它的信息从缓存中删掉了
  2. 开始删除这个topic的所有分区

    2.1 给所有broker发请求,告诉它们这些分区要被删除。broker收到后就不再接受任何在这些分区上的客> 户端请求了

    2.2 把每个分区下的所有副本都置于OfflineReplica状态,这样ISR就不断缩小,当leader副本最后也被置> 于OfflineReplica状态时leader信息将被更新为-1

    2.3 将所有副本置于ReplicaDeletionStarted状态

    2.4 副本状态机捕获状态变更,然后发起StopReplicaRequest给broker,broker接到请求后停止所有> > > fetcher线程、移除缓存,然后删除底层log文件

    2.5 关闭所有空闲的Fetcher线程
  3. 删除zookeeper下/brokers/topics/test-topic节点
  4. 删除zookeeper下/config/topics/test-topic节点
  5. 删除zookeeper下/admin/delete_topics/test-topic节点
  6. 更新各种缓存,把test-topic相关信息移除出去

而如果不配置delete.topic.enable=true命令指挥在zookeeper上删除该节点的信息,让你无法访问它,但是他的数据在保存在kafka上面。