Kafka Streams 线程数
Kafka Streams thread number
我是 Kafka Streams 的新手,我目前对 Kafka Streams 应用程序的最大并行度感到困惑。我经历了 link 并没有得到我想要找到的答案。
https://docs.confluent.io/current/streams/faq.html#streams-faq-scalability-maximum-parallelism
如果我有 2 个输入主题,一个有 10 个分区,另一个有 5 个分区,并且只有一个 Kafka Streams 应用程序实例 运行 处理这两个输入主题,我可以处理的最大线程数是多少在这种情况下? 10 还是 15?
If I have 2 input topics, one have 10 partitions and the other have 5 partitions
听起来不错。所以你总共有 15 个分区。假设您有一个简单的处理器拓扑,没有连接和聚合,因此所有 15 个分区都只是无状态转换。
然后,15 个输入分区中的每一个都将映射到单个 Kafka 流 "task"。如果您有 1 个线程,则来自这 15 个任务的输入将由该 1 个线程处理。如果您有 15 个线程,则每个任务都会有一个专用线程来处理其输入。因此,您可以 运行 1 个应用程序有 15 个线程或 15 个应用程序有 1 个线程,这在逻辑上是相似的:您在 15 个线程中处理 15 个任务。唯一的区别是 15 个应用程序和 1 个线程允许您将负载分散到多个 JVM 上。
同样,如果启动 15 个应用程序实例,每个实例有 1 个线程,则每个应用程序将分配 1 个任务,每个应用程序中的每个 1 个线程将处理其给定的 1 个任务。
what is the maximum thread number I can have in this case? 10 or 15?
您可以将最大线程数设置为任何值。如果所有任务的线程数超过任务总数,则部分线程将保持空闲状态。
如果您还没有阅读,我建议您阅读 https://docs.confluent.io/current/streams/architecture.html#parallelism-model。此外,研究您的应用程序在启动时生成的日志。每个线程记录分配给它的任务,如下所示:
[2018-01-04 16:45:26,859] INFO (org.apache.kafka.streams.processor.internals.StreamThread:351) stream-thread [entities-eb9c0a9b-ecad-48c1-b4e8-715dcf2afef3-StreamThread-3] partition assignment took 110 ms.
current active tasks: [0_0, 0_2, 1_2, 2_2, 3_2, 4_2, 5_2, 6_2, 7_2, 8_2, 9_2, 10_2, 11_2, 12_2, 13_2, 14_2]
current standby tasks: []
previous active tasks: []
Dmitry 的回答似乎并不完全正确。
Then, each of the 15 input partitions will map to a single a Kafka Streams "task"
一般不会。这取决于您的拓扑结构 "structure"。也可以只有10个任务。
否则,Dmitry 的回答非常好!
我是 Kafka Streams 的新手,我目前对 Kafka Streams 应用程序的最大并行度感到困惑。我经历了 link 并没有得到我想要找到的答案。 https://docs.confluent.io/current/streams/faq.html#streams-faq-scalability-maximum-parallelism
如果我有 2 个输入主题,一个有 10 个分区,另一个有 5 个分区,并且只有一个 Kafka Streams 应用程序实例 运行 处理这两个输入主题,我可以处理的最大线程数是多少在这种情况下? 10 还是 15?
If I have 2 input topics, one have 10 partitions and the other have 5 partitions
听起来不错。所以你总共有 15 个分区。假设您有一个简单的处理器拓扑,没有连接和聚合,因此所有 15 个分区都只是无状态转换。
然后,15 个输入分区中的每一个都将映射到单个 Kafka 流 "task"。如果您有 1 个线程,则来自这 15 个任务的输入将由该 1 个线程处理。如果您有 15 个线程,则每个任务都会有一个专用线程来处理其输入。因此,您可以 运行 1 个应用程序有 15 个线程或 15 个应用程序有 1 个线程,这在逻辑上是相似的:您在 15 个线程中处理 15 个任务。唯一的区别是 15 个应用程序和 1 个线程允许您将负载分散到多个 JVM 上。
同样,如果启动 15 个应用程序实例,每个实例有 1 个线程,则每个应用程序将分配 1 个任务,每个应用程序中的每个 1 个线程将处理其给定的 1 个任务。
what is the maximum thread number I can have in this case? 10 or 15?
您可以将最大线程数设置为任何值。如果所有任务的线程数超过任务总数,则部分线程将保持空闲状态。
如果您还没有阅读,我建议您阅读 https://docs.confluent.io/current/streams/architecture.html#parallelism-model。此外,研究您的应用程序在启动时生成的日志。每个线程记录分配给它的任务,如下所示:
[2018-01-04 16:45:26,859] INFO (org.apache.kafka.streams.processor.internals.StreamThread:351) stream-thread [entities-eb9c0a9b-ecad-48c1-b4e8-715dcf2afef3-StreamThread-3] partition assignment took 110 ms.
current active tasks: [0_0, 0_2, 1_2, 2_2, 3_2, 4_2, 5_2, 6_2, 7_2, 8_2, 9_2, 10_2, 11_2, 12_2, 13_2, 14_2]
current standby tasks: []
previous active tasks: []
Dmitry 的回答似乎并不完全正确。
Then, each of the 15 input partitions will map to a single a Kafka Streams "task"
一般不会。这取决于您的拓扑结构 "structure"。也可以只有10个任务。
否则,Dmitry 的回答非常好!