首先删除主题时如何在KSQL中删除表或流

时间:2018-12-11 17:16:02

标签: apache-kafka stream ksql

使用KSQL(融合版本:5.0.1),当链接的主题存在并且已注册(已注册)时,我能够正常地(使用DROP [TABLE|STREAM]删除表/流<NAME> = true)。

但是,如果首先删除主题(Registered = false),则不能删除关联的流或表,并且KSQL指出“未注册名称为Foo的主题”。

问题在于流/表仍显示在列表中,并且无法使用相同名称添加新的流/表。

删除主题后,是否可以删除它们?

4 个答案:

答案 0 :(得分:1)

在官方文档中,我会这样:

SHOW QUERIES;

写下查询ID;

TERMINATES <QueryID>;

DROP TABLE <tablename>;

See documentation...

答案 1 :(得分:0)

一段时间以来,我一直在努力解决这些类型问题。我的笔记就在这里:

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

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

    zookeeper-shell localhost:2181

    ls /经纪人/主题

    _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

开始备份所有内容,所有内容都应消失。但是要小心,你会迷路的 一切,所有数据。

答案 2 :(得分:0)

我认为我找到了答案,或者至少在正确的方向上找到了答案。

您需要在流中重新注册主题。经过一番摸索之后,我设法将主题重新附加到流中,然后将流放下。

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

然后

DROP STREAM <stream_name>;

我不知道这在所有情况下是否都有效,但这使我回到了自己想要的位置。如果其他人可以对此进行迭代并找到更强大的解决方案,那么我想听听。

答案 3 :(得分:0)

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

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

然后:

TERMINATE [QUERY ID];

然后: 删除[表或流];