同时使用 Kafka Streams DSL 创建 Kafka Streams https://kafka.apache.org/0110/documentation/streams/developer-guide
我们遇到了需要用新的拓扑定义更新 Kafka 流的情况。
例如: 开始时,我们定义了一个拓扑,用于从一个主题(源)和一个目标主题(接收器)读取。 但是,在配置更改时,我们现在需要从 2 个不同的主题(如果您愿意,可以读取 2 个源)并写入单个目标主题。
从我们现在构建的内容来看,拓扑定义是硬编码的,类似于在处理器拓扑中定义的东西。
问题:
-
是否可以以声明性方式(例如在 Json 或其他方式中)定义拓扑,这不需要对拓扑进行编码?
-
是否可以重新加载现有的 Kafka 流以使用 Kafka 流拓扑的新定义?
-
对于上面提到的#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是否提供了一种通过外部触发器或系统调用来"重新加载"新拓扑定义的方法?
不。