Kafka中的动态流拓扑

时间:2019-06-18 06:26:25

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

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

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

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

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

问题:

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

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

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

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

谢谢, 阿育斯曼

1 个答案:

答案 0 :(得分:2)

  

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

KStreams DSL是声明性的,但我认为您的意思不是DSL?

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

  

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

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

根据旧/新拓扑的定义方式,对应用程序进行简单的滚动升级就足够了(大约:如果拓扑更改很小),但是可能需要分别部署新应用程序,然后新的已审核,请停用旧的应用程序。

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

  

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

否。