如何在单个Kafka Streams应用程序中连接多个集群?

mix*_*l__ 12 apache-kafka apache-kafka-streams

Kafka Streams开发人员指南中,它说:

Kafka Streams应用程序只能与此配置值指定的单个Kafka群集通信.未来版本的Kafka Streams将支持连接到不同的Kafka集群,以读取输入流和编写输出流.

这是否意味着我的整个应用程序只能连接到单个Kafka群集,或者每个KafkaStreams实例只能连接到一个群集?

我可以创建多个具有连接到不同群集的不同属性的KafkaStreams实例吗?

Mat*_*Sax 9

这意味着单个应用程序只能连接到一个群集.

  • 您无法从群集A中读取主题并将计算结果写入群集B.
  • 无法从具有相同实例的两个不同群集中读取两个主题.

我可以创建多个具有连接到不同群集的不同属性的KafkaStreams实例吗?

是的,一点没错.但那些不同的实例将是不同的应用程序.(想想"消费者群体".)

更新:

在单个JVM中,您可以根据需要创建任意数量的KafkaStreams实例.您还可以将它们配置为连接到不同的群集(KStreamBuilder如果要执行相同的处理,则可以对所有群集使用相同的群集).


Jac*_*ski 7

只是为了补充@Matthias J. Sax的出色答案。

这是否意味着我的整个应用程序只能连接到单个 Kafka 集群,或者 KafkaStreams 的每个实例只能连接到单个集群?

我认为这里有两个问题。

它取决于“我的整个应用程序”的定义,即它可能只是KafkaStreams单个 JVM 上的单个实例或多个实例,或者可能KafkaStreams是作为 pod 执行的 Docker 容器中单个 JVM 上的多个实例。不管是什么,你都会发现“我的整个应用程序”有点太宽泛而且不太精确。

关键是,您无法创建一个可以KafkaStreams与多个 Kafka 集群通信的实例(因为配置是通过映射中的键值对属性进行的),因此您可以回答自己的问题,不能你不是吗?


无法在 Kafka Streams 应用程序中使用两个或多个 Kafka 集群Kafka Streams 和 Spark Structured Streaming 之间的区别之一(后者能够根据需要使用任意数量的 Kafka 集群,因此您可以在不同的 Kafka 之间构建管道)簇)。