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

时间:2017-08-23 19:12:01

标签: apache-kafka apache-kafka-streams

Kafka Streams Developer Guide中说:

  

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

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

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

2 个答案:

答案 0 :(得分:8)

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

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

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

是的,绝对的。但那些不同的实例将是不同的应用程序。 (想想“消费者群体”。)

<强>更新

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

答案 1 :(得分:4)

只需添加来自@Matthias J. Sax的出色答案即可。

  

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

我认为这里有两个问题。

这取决于“我的整个应用程序” 的定义,即它可以仅仅是一个KafkaStreams实例,也可以是单个JVM上的多个实例,或者可能是多个KafkaStreams作为Pod执行的Docker容器中单个JVM上的实例。不管是什么,您都可以找到“我的整个应用程序” 太宽泛且不太精确。

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


无法在Kafka Streams应用程序中使用两个或多个Kafka集群是Kafka Streams和Spark结构化流之间的区别之一(后者可以使用与您一样多的Kafka集群)需要,因此您可以在不同的Kafka群集之间建立管道。