flink并行度和kafka分区在生产数据时有什么关系?

问题描述 投票:0回答:1

我有一个将数据接收到 Kafka 主题的流作业,还有另一个使用 kafka 主题中的数据的流作业。我的Kafka集群的分区号的配置是

3

当我将作业的并行度设置为

4
时,只有 3 个插槽忙于生成数据,并且只有 3 个消费者子任务获取数据。

考虑到任务槽数量的限制,我想把并行度改成

1
。然而,当我将作业的并行度设置为
1
时,只有
1 consumer task slot
获得了数据。

在我看来,即使我将并行度设置为1,我仍然将数据下沉到3个分区中,并且可以有3个消费者子任务消费数据。

为什么只有一个消费者子任务在这里工作?

apache-kafka apache-flink
1个回答
3
投票

Flink 将存储分区与计算分区解耦。

每个 Kafka 分区只能由一个

KafkaSource
子任务消耗,但
KafkaSource
可以从一个或多个分区消耗。给定一个具有 3 个分区的主题,最多可以为 3 个 KafkaSource 分配工作。

并行度设置为1时,只会使用1个slot,并且该slot只能有1个KafkaSource(和1个KafkaSink)。但一个消费者可以处理所有 3 个分区。如果并行度设置为 3,则 3 个消费者可能很忙,每个消费者在自己的槽中处理一个分区。当并行度设置为 4 时,一个槽将有一个空闲的 Kafka 消费者。

在接收器中,默认情况下

KafkaSink
的每个实例将以循环方式写入每个分区。如果您希望控制每条记录写入哪个分区,您可以提供自定义
FlinkKafkaPartitioner
,或者您可以使用
KafkaSerializationSchema
并为每个
ProducerRecord
指定分区。

© www.soinside.com 2019 - 2024. All rights reserved.