如何从cli中删除Kafka主题?

时间:2018-06-05 15:24:31

标签: apache-kafka

$ kafka-topics --zookeeper localhost:2181 --list | grep my-topic
my-topic
$ kafka-topics --zookeeper localhost:2181 --delete --topic my-topic
Topic my-topic is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
$ kafka-topics --zookeeper localhost:2181 --list | grep my-topic
my-topic - marked for deletion

从那时起已经过了几个小时,主题仍然没有被删除。

我已经看到了我应该将delete.topic.enable放入server.properties并重新启动kafka的建议。我试过这个。它没有工作。

$ grep -F delete.topic.enable /usr/local/etc/kafka/server.properties
delete.topic.enable = true

(为什么默认情况下不会这样设置?)

无论如何,这些建议全部都是针对kafka 0. *而且我的版本较新。

$ brew list --versions kafka
kafka 1.1.0

如何删除主题?

我可以关闭kafka和zookeeper,运行rm -r /usr/local/var/lib/kafka-logs /usr/local/var/run/zookeeper/data,然后再次启动zookeeper和kafka。但这是相当激烈的。当然应该有一些方法可以说服kafka-topics实际删除主题吗?

2 个答案:

答案 0 :(得分:1)

您正在使用的命令是删除主题的推荐方法。

不幸的是,有一些原因可能导致某个主题陷入“标记为删除”状态。

如果检查控制器日志,您可能会发现无法删除它的原因。在控制器日志中,删除管理器中的所有行都以Topic Deletion Manager为前缀。

您应该定期看到Handling deletion for topics ...等消息。如果控制器已放弃删除,它应该使用以下格式记录它:Halted deletion of topics ...

如果要强制删除,可以尝试:

  • 删除Zookeeper中的主题详细信息。使用zookeeper-shell.sh,运行rmr /brokers/topics/TOPIC_NAME
  • 弹出控制器

最后,如果这些都不起作用,您可以按照提示删除磁盘上的日志数据/

答案 1 :(得分:1)

根据同事的建议,我

  • 关闭Kafka和Zookeeper
  • 将行listeners=PLAINTEXT://127.0.0.1:9092添加到/usr/local/etc/kafka/server.properties
  • 重启Zookeeper和Kafka

现在我可以再次删除主题。我不知道为什么这应该有效,但怀疑它与最近的macOS升级有关。