从我在网上和其他堆栈溢出的帖子中发现,删除Kafka主题的方法主要有两种。第一个是:a) delete.topic.enable = true
还有跑步 ./kafka-topics.sh ---delete --topic <topicName>
第二种方式: ./zookeeper-shell.sh localhost:2181 rmr brokers/topics
我注意到第一个方法标记了要删除的每个主题,过了几分钟这些主题就被删除了,而第二个方法会立即删除它们。我还注意到重新启动服务器需要几个小时,这正常吗?我在一个代理上有超过1000个主题(用于测试目的)。
1条答案
按热度按时间z31licg01#
第一个方法将在zookeper中创建一个节点
admin/delete_topics/<topic>
,如果您已经像以前一样启用了主题删除,那么kafka代理(topicdeletionmanager)中的给定线程将监视delete_topics
childs将处理这个问题,这意味着从zookeper中删除日志,但也要从所有kafka副本中删除日志,确保您不会处于无效状态。整个过程描述如下:https://github.com/apache/kafka/blob/0.11.0/core/src/main/scala/kafka/controller/topicdeletionmanager.scala直接从zookeeper中删除只意味着从orchestrator中删除。当然,当请求元数据时,主题不再在这里(好吧,也许它们可以从缓存中删除),但是日志文件不会被删除(至少现在不会,我假设代理会检测到日志无效,并在某个时候删除它们),但是在代理上可能会有一些不一致(如果您正在重新平衡,你可能会弄坏很多东西)。这可能意味着一些经纪人会认为它已被删除,而另一些经纪人则认为它仍然存在。。。远非理想。
删除fom zookeeper(以及来自代理的日志)从现在看来确实是可能的,但是要注意,它可能会导致冲突、无效状态、随机错误,并且在将来的版本中可能根本不起作用。