【问题标题】:Dynamic Streams Topology in KafkaKafka 中的动态流拓扑
【发布时间】:2019-10-31 17:30:04
【问题描述】:

使用 Kafka Streams DSL 创建 Kafka Streams 时 https://kafka.apache.org/0110/documentation/streams/developer-guide

我们遇到了需要使用新拓扑定义更新 Kafka 流的情况。

例如: 当我们开始时,我们定义了一个拓扑来读取一个主题(Source)和一个目标主题(Sink)。 但是,在配置更改时,我们现在需要读取 2 个不同的主题(如果愿意,可以是 2 个源)并写入单个目标主题。

根据我们现在构建的内容,拓扑定义是硬编码的,类似于processor topology 中的定义。

问题:

  1. 是否可以以声明性方式(例如 Json 或其他方式)定义拓扑,而无需对拓扑进行编码?

  2. 是否可以重新加载现有的 Kafka 流以使用新定义的 Kafka 流拓扑?

  3. 对于上面提到的 #2,Kafka Streams DSL 是否提供了一种通过外部触发器或系统调用“重新加载”新拓扑定义的方法?

我们正在使用 JDK 1.8 和 Kafka DSL 2.2.0

谢谢, 阿尤斯曼

【问题讨论】:

    标签: java apache-kafka apache-kafka-streams


    【解决方案1】:

    是否可以以声明性方式(比如 Json 或其他方式)定义拓扑,而不需要对拓扑进行编码?

    KStreams DSL 是声明性的,但我假设您的意思不是 DSL?

    如果是这样,答案是否定的。不过,您可能想看看 KSQL。

    是否可以重新加载现有的 Kafka Stream 以使用新定义的 Kafka Streams 拓扑?

    您的意思是如果现有的 Kafka Streams应用程序 可以重新加载处理拓扑的新定义?如果是这样,答案是否定的。在这种情况下,您需要部署新版本的应用程序。

    根据旧/新拓扑的定义方式,对您的应用程序进行简单的滚动升级可能就足够了(粗略地说:如果拓扑更改很小),但您可能需要单独部署新应用程序,然后,一旦新的应用程序已经过审核,请停用您的旧应用程序。

    注意:KStreams 是一个 Java 库,根据设计,它不包含操作/管理使用 KStreams 库的 Java 应用程序的功能。

    对于上面提到的 #2,Kafka Streams DSL 是否提供了一种通过外部触发器或系统调用“重新加载”新拓扑定义的方法?

    没有。

    【讨论】:

    • 嘿@Michael G. Noll,正如您的个人资料所暗示的那样,您来自 Confluent。您关于“介绍 Kafka Streams”的演讲内容丰富。谢谢。
    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 2018-01-19
    • 2015-10-05
    相关资源
    最近更新 更多