【问题标题】:How to DROP a table or stream in KSQL when topic was dropped first第一次删除主题时如何在 KSQL 中删除表或流
【发布时间】:2021-06-24 14:51:09
【问题描述】:

使用 KSQL(Confluent:版本:5.0.1)我可以正常删除表/流(使用 DROP [TABLE|STREAM]<NAME>,当链接主题存在并注册时(Registered=true)。

但是,如果首先删除主题 (Registered=false),则无法删除关联的流或表,KSQL 指出“没有注册名为 Foo 的主题”。

问题是流/表仍然显示在列表中,并且不能使用相同的名称添加新的流/表。

主题被删除后有什么办法可以删除吗?

【问题讨论】:

    标签: apache-kafka stream ksqldb


    【解决方案1】:

    从官方文档来看,我会这样做:

    SHOW QUERIES;
    

    写下查询ID;

    TERMINATE <QueryID>;
    
    DROP TABLE <tablename>;
    

    [查看文档...]

    【讨论】:

    • 您可以运行 DESCRIBE YOUR_STREAM_NAME 命令来查找特定 STREAM 的查询 ID。查询id存在于sourceDescription->writeQueries->查询结果JSON中的id。
    【解决方案2】:

    我想我找到了答案,或者至少找到了正确的方向。

    您需要在流中重新注册主题。经过一番折腾,我设法将我的主题重新附加到流中,删除流。

    REGISTER TOPIC <ksql_topic_name> WITH (KAFKA_TOPIC='<kafka_topic_name>', VALUE_FORMAT='<format>');
    

    那么,

    DROP STREAM <stream_name>;
    

    我不知道这是否适用于所有情况,但它让我回到了我想去的地方。如果其他人可以对此进行迭代并找到更强大的解决方案,我想听听。

    【讨论】:

      【解决方案3】:

      我一直在努力解决这些类型的问题。根据我的笔记,这就是我所在的位置:

      在删除流/表/主题时遇到问题?在 zookeeper 中删除它们:

      • 关闭与您将要删除的主题相关的所有生产者或消费者
      • 尝试从 KSQL CLI 中删除表和流
      • 关闭 KSQL 服务器
      • 使用“kafka-topic”CLI 删除主题
      • 像这样在zookeeper中删除:

        zookeeper-shell 本地主机:2181

        ls /brokers/topics

        _confluent-controlcenter-5-0-0-1-TriggerEventsStore-changelog, _confluent-controlcenter-5-0-0-1-error-topic, ...

        rmr /brokers/topics/yourTopicName

      现在做一个“ kafka-topics --list --zookeeper localhost:2181' 他们应该永远消失了。

      或者,对于绝对核选项:

      • 尝试从 KSQL CLI 中删除表和流
      • 关闭 KSQL 服务器
      • 关闭您的经纪人和动物园管理员
      • 删除每个代理节点上 kafka 日志目录中的所有内容(目录的位置在您的属性文件中定义)。
      • 再次启动 Zookeeper 并从 Zookeeper CLI 中删除 /brokers/topics

      重新开始一切,一切都应该消失了。但要小心,你会输 一切,您的所有数据。

      【讨论】:

      • 可以使用 kafka-topics CLI 删除主题 - 这不是问题。它是仍然注册的表和流,一旦删除主题(已注册 = false)就无法删除。 NUCLEAR OPTION - 必须有更好的方法来删除一些死流/表
      • 所以当你从 zookeeper 中删除支持主题时,它们仍然作为 KSQL 中的流和表存在?
      • 感谢 medloh 的 cmets。 - 当我使用“kafka-topic”CLI 删除主题时,该主题将从 kafka 和 KSQL 中删除 - 当我通过 zookeeper 执行此操作时,该主题将从 kafka 中删除,但不会从 KSQL 中删除。 - KSQL 中关联的流和表仍然存在
      • 我感受到了你的痛苦——主题、流、表格,它们似乎都很难永久摆脱。即使有我上面描述的核选项,他们有时也会回来。所以我猜想某处有一个 KSQL 元数据存储来保存该信息。如果您在这方面取得任何进展,请告诉我,希望下一个版本会表现得更好。
      【解决方案4】:

      您必须先终止所有正在运行的查询。

      SHOW QUERIES;  --> that will show you the active queries (COPY QUERY ID)
      

      然后:

      TERMINATE [QUERY ID];
      

      然后: 删除 [表或流];

      【讨论】:

        猜你喜欢
        • 2018-05-19
        • 2014-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-20
        • 2019-06-20
        • 2014-07-23
        • 2014-07-21
        相关资源
        最近更新 更多