如果每个主题都有单个分区,则可扩展性是否适用于 Kafka 流

Is scalability applicable with Kafka stream if each topic has single partition

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

我在 Kafka 集群中有大约 60 个主题。每个主题只有一个分区。 我的 Kafka 集群是否可以通过 Kafka 流实现 scalability/parallelism?

您想对所有主题进行相同的计算吗?为此,我建议介绍一个额外的主题,其中包含许多用于横向扩展的分区:

// 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...

Note: You need to create the topic "topic-with-many-partitions" manually before starting your Streams application

专业提示:

The topic "topic-with-many-partitions" can have a very short retention time as it's only used for scaling and must not hold data long term.

更新

如果你有 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 运行.