Kafka Streams线号

Arv*_*n.Z 4 apache-kafka apache-kafka-streams

我是Kafka Streams的新手,我目前对Kafka Streams应用程序的最大并行性感到困惑.我经历了以下链接,并没有得到我想要找到的答案. https://docs.confluent.io/current/streams/faq.html#streams-faq-scalability-maximum-parallelism

如果我有2个输入主题,一个有10个分区,另一个有5个分区,并且只有一个Kafka Streams应用程序实例正在运行来处理这两个输入主题,在这种情况下我可以拥有的最大线程数是多少?10或15?

Mat*_*Sax 10

德米特里的回答似乎并不完全正确。

然后,15 个输入分区中的每一个都将映射到一个 Kafka Streams“任务”

一般不会。这取决于拓扑的“结构”。它也可能只有 10 个任务。

否则,德米特里的出色回答!


Dmi*_*sky 9

如果我有2个输入主题,一个有10个分区,另一个有5个分区

听起来不错.所以你有15个分区.假设您有一个简单的处理器拓扑,没有连接和聚合,因此所有15个分区都只是无状态转换.

然后,15个输入分区中的每一个将映射到单个Kafka Streams"任务".如果你有1个线程,那么这15个任务的输入将由该1个线程处理.如果您有15个线程,则每个任务都有一个专用线程来处理其输入.所以你可以用15个线程运行1个应用程序或者用1个线程运行15个应用程序,它在逻辑上相似:你在15个线程中处理15个任务.唯一的区别是15个带有1个线程的应用程序允许您跨JVM分散负载.

同样,如果启动应用程序的15个实例,每个实例有1个线程,则每个应用程序将分配1个任务,每个应用程序中的每个1个线程将处理其给定的1个任务.

在这种情况下,我可以拥有的最大线程数是多少?10或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: []
Run Code Online (Sandbox Code Playgroud)

  • 不,它实际上是<sub-topology-number>_<partition_number>。希望它是线程,以便我可以通过查看此日志找到应用程序实例-线程-任务映射。有没有找到这个映射的编程方式? (2认同)