在Kafka Streams Developer Guide中说:
Kafka Streams应用程序只能与单个Kafka群集通信 由此配置值指定。未来版本的Kafka Streams将会 支持连接到不同的Kafka集群以读取输入流和 写输出流。
这是否意味着我的整个应用程序只能连接到单个Kafka群集,或者KafkaStreams的每个实例只能连接到一个群集?
我可以创建多个具有连接到不同群集的不同属性的KafkaStreams实例吗?
答案 0 :(得分:8)
这意味着单个应用程序只能连接到一个群集。
我可以创建多个具有连接到不同群集的不同属性的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群集之间建立管道。