删除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.
删除线程执行删除操作的真正逻辑是:
- 它首先会给当前所有broker发送更新元数据信息的请求,告诉这些broker说这个topic要删除了,你们可> > 以把它的信息从缓存中删掉了
- 开始删除这个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线程- 删除zookeeper下/brokers/topics/test-topic节点
- 删除zookeeper下/config/topics/test-topic节点
- 删除zookeeper下/admin/delete_topics/test-topic节点
- 更新各种缓存,把test-topic相关信息移除出去
而如果不配置delete.topic.enable=true命令指挥在zookeeper上删除该节点的信息,让你无法访问它,但是他的数据在保存在kafka上面。