Apache flink 卡夫卡流是如何在弗林克的任务经理中分布的?

Apache flink 卡夫卡流是如何在弗林克的任务经理中分布的?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,假设一个Flink作业(三个任务管理器tm1,tm2&tm3)将Kafka主题作为源,那么流是如何在它们之间分布的?谁负责分发?这是在FlinkKafkaConsumerBase的open()方法中完成的。Flink运行时上下文提供了每个实例可用于确定Flink Kafka使用者的并行实例总数以及特定实例的索引的方法。每个实例都使用这些方法来独立地承担从特定分区读取的责任。除了David所写的内容之外,您应该记住一件事:KafkaProducer的最大平行度受分区数量的限制。由于Flink将从第

假设一个Flink作业(三个任务管理器
tm1
tm2
&
tm3
)将Kafka主题作为源,那么流是如何在它们之间分布的?谁负责分发?

这是在FlinkKafkaConsumerBase的
open()
方法中完成的。Flink运行时上下文提供了每个实例可用于确定Flink Kafka使用者的并行实例总数以及特定实例的索引的方法。每个实例都使用这些方法来独立地承担从特定分区读取的责任。

除了David所写的内容之外,您应该记住一件事:KafkaProducer的最大平行度受分区数量的限制。由于Flink将从第一个插槽(第一个任务管理器)开始分配任务,然后继续分配第二个插槽,依此类推,并对每个源重复此操作,因此如果任务管理器多于主题分区,您可能会看到不平衡的工作负载

在一个场景中,您有许多kafka源代码和少量的主题分区,这种不平衡变得越来越明显。在极端情况下,您有多个只有一个分区的源,所有这些源都将被第一个插槽/任务管理器使用。如果使用,可以解决此边缘情况。这当然是一个边缘案例,但当您定义资源和工作流时,最好记住这一点