Kafka 中的动态流拓扑



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

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

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

从我们现在构建的内容来看,拓扑定义是硬编码的,类似于在处理器拓扑中定义的东西。

问题:

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

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

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

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

谢谢 阿尤斯曼

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

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

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

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

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

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

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

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

不。

相关内容

  • 没有找到相关文章

最新更新