为什么删除 Kafka 主题需要这么长时间?

Why can it take so long to delete Kafka topics?

在 3 节点集群上,我创建了几个包含数千条消息的主题。我注意到删除主题需要很长时间。我花了超过 14 分钟删除 500 个主题

  1. 是否有删除主题的最佳实践?
  2. 有没有文档解释为什么删除一个主题要花这么多时间?
  3. 当我创建主题时,Kafka 会在log.dirs 下创建一个文件夹。我有 10000 个主题;我 运行 一条命令将它们全部删除。 Kafka 已从 log.dirs 中删除所有 10000 个文件,但 Kafka-topics.sh 显示文件系统上不存在的主题,并带有“- 标记为删除”。
  1. 我认为在 Kafka 中删除主题没有任何最佳实践。至于 delete.topic.enable=true 是在 server.properties 中定义的,您可以使用
  2. 简单地删除主题
bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic myTopic
  1. 如果您的主题足够大(而且您的复制因子可能也很高),那是正常的。本质上,主题的消息存储在日志文件中。如果您的主题非常大,那么删除所有这些文件可能需要一些时间。我认为这里的正确指标是您尝试删除的主题的大小,而不是主题的数量(您可以有 500 个主题,每个主题有 1 条消息,而不是 500 个主题,例如每个主题有 1TB 的消息)。

不保证 Kafka 主题删除是即时的。当您 'delete' 一个主题时,您实际上是在将其标记为删除。当 TopicDeletionManager 下次运行时,它将开始删除所有标记为删除的主题。如果主题日志较大,这也可能需要更长的时间。