【问题标题】:Kafka Streams Threading Model with more than one Stream on the same instance and JVMKafka Streams 线程模型,在同一实例和 JVM 上具有多个 Stream
【发布时间】:2018-09-09 19:08:58
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,你能澄清一件事吗?当您说每个任务仅由我理解的一个线程执行时,说一个线程可以执行多个任务是否正确?
    • 是的。一个线程可以执行多个任务。这也显示在您链接到的文档中的图中。线程 1 执行它们的两个任务。
    猜你喜欢
    • 2020-02-12
    • 1970-01-01
    • 2018-01-19
    • 2020-01-10
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多