我是Kafka流的新手,我目前对Kafka流应用程序的最大并行性感到困惑。我通过下面的链接,并没有得到答案,我试图找到。https://docs.confluent.io/current/streams/faq.html#streams-最大并行性
如果我有2个输入主题,一个有10个分区,另一个有5个分区,并且只有一个kafka streams应用程序示例正在运行以处理这两个输入主题,那么在这种情况下,我可以拥有的最大线程数是多少?10还是15?
我是Kafka流的新手,我目前对Kafka流应用程序的最大并行性感到困惑。我通过下面的链接,并没有得到答案,我试图找到。https://docs.confluent.io/current/streams/faq.html#streams-最大并行性
如果我有2个输入主题,一个有10个分区,另一个有5个分区,并且只有一个kafka streams应用程序示例正在运行以处理这两个输入主题,那么在这种情况下,我可以拥有的最大线程数是多少?10还是15?
2条答案
按热度按时间j9per5c41#
如果我有两个输入主题,一个有10个分区,另一个有5个分区
听起来不错。总共有15个分区。假设您有一个简单的处理器拓扑,没有连接和聚合,因此所有15个分区都只是在进行无状态转换。
然后,15个输入分区中的每一个都将Map到一个单独的kafka流“任务”。如果有1个线程,那么这15个任务的输入将由这1个线程处理。如果有15个线程,则每个任务将有一个专用线程来处理其输入。因此,您可以用15个线程运行1个应用程序,或者用1个线程运行15个应用程序,这在逻辑上是相似的:您在15个线程中处理15个任务。唯一的区别是,15个应用程序和1个线程允许您将负载分布在JVM上。
同样,如果启动应用程序的15个示例,每个示例有1个线程,那么每个应用程序将被分配1个任务,每个应用程序中的每个线程将处理其给定的1个任务。
在这种情况下,我能拥有的最大线程数是多少?10还是15?
您可以将最大线程数设置为任何值。如果所有任务的线程数超过了任务总数,那么一些线程将保持空闲。
我建议你读书https://docs.confluent.io/current/streams/architecture.html#parallelism-模特,如果你还没有。另外,研究应用程序启动时生成的日志。每个线程记录分配给它的任务,如下所示:
yzuktlbb2#
德米特里的回答似乎并不完全正确。
然后,15个输入分区中的每一个都将Map到一个单独的Kafka流“任务”
一般来说不是。这取决于拓扑的“结构”。也可能只有10项任务。
否则,德米特里的回答很好!