如果每个主题都有单个分区

时间:2017-11-16 09:16:22

标签: apache-kafka-streams

根据Kafka流文档我的理解, 最大可能的并行任务等于群集中所有主题中主题的最大分区数。

我在Kafka集群中有大约60个主题。每个主题仅具有单个分区。 是否可以使用Kafka流为我的Kafka集群实现可伸缩性/并行性?

1 个答案:

答案 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。