如果每个主题都有单个分区,则可扩展性是否适用于 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 运行.
我根据 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 运行.