具有多个节点的KStream

时间:2019-05-29 02:59:58

标签: apache-kafka stream apache-kafka-streams

使用kafka流构建流应用程序。我有8个分区的主题,其中应用程序不断向主题发布/发布消息,并在该主题之上创建了一个Kstream。到目前为止,我只启动一个实例(JVM)时就可以创建流了,根据文档,流是在本地JVM中创建的,但是我的问题是,如果将代码移至QA或生产环境中,我将有8个JVM并行运行,因此8流根据JVM创建...

现在,我的实时服务(微服务)代码尝试从流中读取数据(ip地址位于netscaler后面),由于流处于位置,它将如何表现..我的所有8个实例都将具有相同的副本的数据,否则将是不完整的?

1 个答案:

答案 0 :(得分:0)

TL; DR:它将是“部分”。

在具有仅带有一个输入主题的基本拓扑的Kafka Streams应用程序中,假设每个应用程序实例(num.stream.threads)有一个线程,如果您启动多个具有相同应用程序名称的应用程序实例,它们将共享以下分区:您已经输入了主题。

例如,如果您有8个分区,并且启动了8个这样的KafkaStreams实例,则每个实例将管理一个分区(此分布会自动发生)。 它还具有容错能力:如果8个应用程序中的任何一个死亡,那么额外的分区将由其他7个剩余任务之一管理。另外,如果添加一个额外的任务(要在8个分区中有9个分区),则其中一个将保持空闲状态,并且仅在其他任何实例发生故障的情况下才会执行。