与Kafka Streams一起分发工作

dme*_*ead 5 apache-kafka apache-kafka-streams

我正在使用Kafka Streams对Kafka主题进行并发工作.

该流具有以下形式

stream(topic)
 .map(somefunction)
 .through(secondtopic)
Run Code Online (Sandbox Code Playgroud)

我已经设置KStreams了15个工作线程,但似乎线程之间的工作没有正确平衡(或根本没有).我的设置可能有问题吗?我期待工作将在工作线程中均匀分布,但似乎并非如此.

来自jvisualvm的快照

fhu*_*ois 12

您只能拥有与输入Kafka主题分区一样多的线程.

一个分区内的消息由单个线程处理,以提供消息传递的总顺序.

实际上,在KafkaStreams中,输入主题分区均匀分布在任务而不是消息上.

因此,只有当消息在分区之间很好地平衡时,才能在线程之间很好地平衡工作.

要获得有关线程模型的更多信息,请查看Confluent文档