【问题标题】:KStream with multiple nodes具有多个节点的 KStream
【发布时间】:2019-05-29 02:59:58
【问题描述】:
使用 kafka 流构建流应用程序。我有 8 个分区的主题,应用程序不断将消息发布/发布到主题,并在该主题之上创建了一个 Kstream。到目前为止,创建流很好,因为我只启动了一个实例(JVM),根据文档,在本地 JVM 中创建流,但我的问题是如果将代码移动到 QA 或生产中,我将有 8 个 JVM 并行运行,因此 8每个 JVM 创建的流...
现在,我的实时服务(微服务)代码尝试从流中读取数据(IP 地址在 netscaler 后面),由于流在位置,它将如何表现......我所有的 8 个实例都将具有相同的副本数据还是部分数据?
【问题讨论】:
标签:
apache-kafka
stream
apache-kafka-streams
【解决方案1】:
TL;DR:它将是“部分的”。
在具有基本拓扑结构的 Kafka Streams 应用程序中,只有一个输入主题,假设每个应用程序实例有一个线程 (num.stream.threads),如果您启动多个具有相同应用程序名称的应用程序实例,它们将共享您拥有的分区在您的输入主题中。
例如,如果您有 8 个分区并像这样启动 8 个 KafkaStreams 实例,则每个实例将管理一个分区(此分配自动发生)。
它还将是容错的:如果 8 个应用程序中的任何一个死掉 - 那么额外的分区将由其他 7 个剩余任务之一管理。此外,如果您添加一个额外的任务(在 8 个分区中有 9 个),其中一个将保持空闲状态,并且仅在任何其他实例发生故障的情况下才会启动。