根据Kafka流文档我的理解, 最大可能的并行任务等于群集中所有主题中主题的最大分区数。
我在Kafka集群中有大约60个主题。每个主题仅具有单个分区。 是否可以使用Kafka流为我的Kafka集群实现可伸缩性/并行性?
答案 0 :(得分:2)
您想对所有主题进行相同的计算吗?为此,我建议引入一个额外的主题,其中包含许多用于扩展的分区:
// using new 1.0 API
StreamsBuilder builder = new StreamsBuilder():
KStream parallelizedStream = builder
.stream(/* subscribe to all topics at once*/)
.through("topic-with-many-partitions");
// apply computation
parallelizedStream...
注意:在启动Streams应用程序之前,您需要手动创建“topic-with-many-partitions”主题
专业提示:
主题“with-many-partitions”主题的保留时间非常短,因为它仅用于扩展,不能长期保存数据。
<强>更新强>
如果你有10个主题T1到T10,每个都有一个分区,上面的程序将执行如下(TN是10个分区的虚拟主题):
T1-0 --+ +--> TN-0 --> T1_1
... --+--> T0_0 --+--> ... --> ...
T10-0 --+ +--> TN-10 --> T1_10
程序的第一部分只会读取所有10个输入主题,并将其写回TN的10个分区。之后,您可以获得最多10个并行任务,每个任务处理一个输入分区。如果你启动10 KafakStreams
个实例,只有一个会执行T0_0,每个实例都会运行一个T1_x。