如何删除 Apache Kafka 中的多个主题

How to delete multiple topics in Apache Kafka

假设我有多个主题具有相同的前缀,例如:

giorgos-topic1
giorgos-topic2
giorgos-topic3
...

用于删除单个主题(比如giorgos-topic1)的命令如下:

./bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic giorgos-topic1

是否可以使用单个命令和可能的常规 expression/wildcard(例如 giorgos-*)删除多个主题,而不是逐一键入所有需要删除的主题名称?

是的,您可以在使用 kafka-topics.sh 工具删除主题时使用类似正则表达式的表达式:

例如删除所有以giorgos-开头的主题:

./bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic 'giorgos-.*'

使用 Admin API,您还可以一次删除多个主题,请参阅 AdminClient.deleteTopics

在无法使用正则表达式的情况下,我们可以使用逗号分隔的主题名称列表来删除主题。

kafka-topics.sh --zookeeper 10.0.0.160:2181 --delete --topic giorgos-topic1,giorgos-topic2,giorgos-topic3,...

如果报错no matches found: giorgos-.*

请加单引号('giorgos-.* ')
./bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic 'giorgos-.*'

这是一次删除所有主题的最简单方法。 按照以下步骤操作:

  1. 连接到 zookeeper CLI。

zookeeper-shell.bat localhost:2181

您将收到一条消息 - “欢迎使用动物园管理员!”

  1. 然后输入以下命令,所有主题将被删除。

deleteall /brokers/topics

我自己测试过,对我有用。

只是为了添加到已接受的答案中,* 通配符前面需要加上“.”

根据我的经验:

--delete --topic '_confluent-controlcenter-5-3-1-1-.*' 有效

--delete --topic '_confluent-controlcenter-5-3-1-1-*' 不起作用

注意:我会把它添加为评论,但没有足够的代表。

最近的 Kafka 版本将删除 Zookeeper 依赖项,并且今后您需要通过 --boostrap-server:

引用代理
kafka-topics \
    --bootstrap-server localhost:9092,localhost:9093,localhost:9094 
    --delete \
    --topic 'giorgos-.*'