apache-kafka - Kafka Streams 线程模型在同一实例和 JVM 上具有多个流

标签 apache-kafka kafka-consumer-api kafka-producer-api apache-kafka-streams confluent-platform

您好,我正在尝试对 kafka 流线程模型有更多的了解,我正在 confluent 文档中查看此示例 https://docs.confluent.io/current/streams/architecture.html#example

据我了解,此示例适用于单个“kafka 流应用程序”,在第一个图中,该应用程序部署在一台机器上并允许使用两个线程(可配置)。它将自身拆分为两个线程,导致 3 个独立的“任务”,我认为,它们彼此做同样的事情,它们只是并行化。我想我明白了。

我的问题是,如果我在同一台机器和同一 jvm 中部署第二个完全不同的“kafka 流应用程序”,它有自己唯一的客户端 ID 会怎么样。第二个 kafka 流应用程序是否能够使用与第一个相同的两个(共享)线程,或者第一个流是否独占它被允许使用的线程。

问这个问题的另一种方式可能是所需的最小线程数,等于机器上运行的独立 Kafka 流应用程序的数量?

最佳答案

线程由 KafkaStreams 实例拥有。因此,如果您创建并启动多个 KafkaStreams,每个实例都有自己的线程——它们不是共享的。

顺便说一句:任务的数量与 KafkaStreams 实例的数量和线程的数量无关。任务的数量取决于输入主题的分区数量以及拓扑 DAG 的结构。

此外,任务的数量有效地限制了整体并行度。每个任务都由一个线程执行。如果线程多于任务,一些线程将空闲,因为没有任务可以分配给它们。

还有一点:从并行的角度来看,启动一个 KafkaStreams 实例并将其配置为 3 个线程,或者启动三个 KafkaStreams,都没有区别> 每个实例都有一个线程。所有可用任务将均匀分布在所有可用线程上。

关于apache-kafka - Kafka Streams 线程模型在同一实例和 JVM 上具有多个流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49579555/

相关文章:

java - Apache Kafka 生产者如何并行地将记录发送到分区?

apache-kafka - 卡夫卡消费者 session 超时

apache-spark - Spark Streaming - 将 json 格式的消息 Dstream 到 DataFrame

apache-kafka - Kafka主题删除不起作用

hadoop - 通过 nifi 将 Hive 表中的数据放入 kafka 主题

apache-kafka - 单个 Kafka 生产者是否可以为多个主题生成消息以及如何生成消息?

apache-kafka - Kafka 抛出 java.nio.channels.ClosedChannelException

java - 想要输入主机名:9092 in BootStrap url(I have the hostname entry against the actual url in my host file windows) JAVA

apache-kafka - 我如何使用嵌入式模式从 Kafka 反序列化 Avro

Python kafka消费者不会消费来自生产者的消息