Kafka 中的动态流拓扑

Dynamic Streams Topology in Kafka

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

我们遇到了需要使用新拓扑定义更新 Kafka Streams 的场景。

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

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

问题:

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

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

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

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

谢谢, 阿尤斯曼

Is it possible to define topology in a declarative way (say in a Json or something else), which doesn't require a codification of the topology?

KStreams DSL 是声明式的,但我假设您指的不是 DSL?

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

Is it possible to reload an existing Kafka Stream to use a new definition of the Kafka Streams Topology?

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

根据 old/new 拓扑的定义方式,应用程序的简单滚动升级可能就足够了(大致:如果拓扑更改很小),但您可能需要单独部署新应用程序并且然后,一旦新应用程序通过审核,就停用您的旧应用程序。

注意:KStreams 是一个 Java 库,在设计上不包含 operate/manage 使用 KStreams 库的 Java 应用程序的功能。

For #2 mentioned above, does Kafka Streams DSL provide a way to "reload" new topology definitions by way of an external trigger or system call?

没有