【问题标题】:Apache Kafka : Delete topics in bulkApache Kafka:批量删除主题
【发布时间】:2022-11-03 23:40:34
【问题描述】:

我们有一个场景,我们需要跨集群删除多个 kafka 主题,每个集群中的主题数>1k。我们如何从 CLI 中做到这一点?我知道我们可以使用--delete --topic <topic1>,<topic2>,... 使用逗号分隔主题名称,但是我们将这些主题名称保存在客户已共享的文件中。我们可以做某种循环并在 cli 命令/脚本中一个一个地删除它们吗? 一开始,这似乎微不足道。但是我无法得出任何明确的策略来做到这一点。有人可以请帮助一些伪代码或一个工作的会更好。

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    不,CLI 不接受列表。

    所以是的,编写一个简单的 bash 或 AWK script(或您选择的编程语言)来循环文件。或者在链接的帖子中提到,使用 Kafka 提供程序将您的文件转换为 Terraform HCL 定义,然后您可以terraform destroy

    【讨论】:

    • 感谢您澄清这一点。只是对 awk 解决方案的后续问题,关于您在其他聊天中的评论;所以你提到要添加一个 sleep 10,以免动物园管理员超载。将它也添加到删除中会是一个明智的选择吗?
    • 无论如何,删除都是异步的,但添加睡眠不会受到伤害
    【解决方案2】:

    在这里发布我的脚本;希望它可以帮助别人

    #!/bin/bash
    raw_file=$1 
    sed -i '/^$/d' ${raw_file}
    count=1
    while read topics; do
        # reading each line    
        echo "`date +%c`"
        echo "#${count}:Deleting Topic:${topics}"
        ./kafka-topics.sh --bootstrap-servers <HostName>:<Port> --delete --topic $topics
        status=$?
        [ $status -eq 0 ] && echo "${topics}:SUCCESS"|tee -a ${raw_file}-status || echo "${topics}:FAILURE"|tee -a ${raw_file}-status
        echo "========================================================================="
        count=$[$count+1]
    done < ${raw_file}
    

    在某些情况下,由于某种原因代理不可用,我们也可以从动物园管理员那里完成。

    kafka-topics.sh --zookeeper <hostName>:<port> --delete --topic $topics
    

    这不会立即将其删除,而是将其标记为删除,然后当代理领导者与 Zookeeper 连接时,它将复制元数据并在那里实际删除主题。

    【讨论】:

      猜你喜欢
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 2018-07-15
      • 2017-10-17
      • 1970-01-01
      • 2014-08-08
      • 2019-07-07
      相关资源
      最近更新 更多