Apache flink apacheflink中的任务分配

Apache flink apacheflink中的任务分配,apache-flink,Apache Flink,考虑一个具有一些节点的Flink集群,其中每个节点都有一个多核处理器。如果我们根据内核数量和相等的内存共享来配置插槽数量,Apache Flink如何在节点和空闲插槽之间分配任务?他们受到公平对待吗 当我们根据节点上可用的内核数量配置任务插槽时,是否有任何方法可以使/配置Flink平等地对待插槽 例如,假设我们对数据进行平均分区,并在分区上运行相同的任务。Flink使用一些节点的所有插槽,同时一些节点完全空闲。涉及的CPU核数较少的节点输出结果的速度比涉及进程的CPU核数较多的节点快得多。除此之

考虑一个具有一些节点的Flink集群,其中每个节点都有一个多核处理器。如果我们根据内核数量和相等的内存共享来配置插槽数量,Apache Flink如何在节点和空闲插槽之间分配任务?他们受到公平对待吗
当我们根据节点上可用的内核数量配置任务插槽时,是否有任何方法可以使/配置Flink平等地对待插槽
例如,假设我们对数据进行平均分区,并在分区上运行相同的任务。Flink使用一些节点的所有插槽,同时一些节点完全空闲。涉及的CPU核数较少的节点输出结果的速度比涉及进程的CPU核数较多的节点快得多。除此之外,此加速比与每个节点中使用的内核数不成正比。换句话说,如果在一个节点中有一个核心被占用,而在另一个节点中有两个核心被占用,那么在公平地将每个核心视为一个时隙时,每个时隙应该在几乎相等的时间内输出相同任务的结果,而不管它们属于哪个节点。但是,这里的情况并非如此。
基于这个假设,我想说的是,节点并没有得到平等对待。这反过来会产生与可用节点数不成比例的时间结果。我们不能说增加插槽数量必然会减少时间成本


我非常感谢ApacheFlink社区的任何评论

非常旧的线程,但对于当前版本,有一个解决此问题的方法

Flink 1.5增加了资源弹性。这意味着Flink现在能够在集群管理框架上分配新的容器,如纱线或Mesos。由于这些更改(也适用于独立模式),Flink不再考虑一组固定的TaskManager,因为如果需要,它将启动新的容器(在独立模式下不工作)。因此,系统很难决定将属于单个作业的时隙分布到多个TMs。当你认为像你这样的工作可能会从这样的策略中受益,而其他人会从共同定位它的槽中获益时,情况就变得更加困难。如果您想对系统不完全了解的多个作业(因为它们是按顺序提交的)执行调度wrt,则会变得更加复杂。因此,Flink目前假设插槽请求可以由任何TaskManager完成


从版本>=1.5开始,Flink的默认策略认为每个插槽在资源方面都是相同的。在这种假设下,wrt资源放置任务的位置应该无关紧要,因为所有插槽都应该相同。有鉴于此,放置任务的主要目标是将它们与其输入保持一致,以最小化网络I/O

如果我们现在处于一个独立的设置中,有固定数量的
TaskManagers
在运行,Flink将以任意方式(不提供任何保证)为源选择插槽,然后在可能的情况下将其消费者集中在相同的插槽中

当在纱线或Mesos上运行Flink时,Flink可以启动新的
任务管理器
,Flink将首先使用现有
任务管理器
的所有插槽,然后再请求新插槽。在本例中,您将看到所有源都将以尽可能少的
TaskManagers
结束

由于CPU不是孤立的wrt插槽(它们是共享资源),因此上述假设并非在所有情况下都成立。因此,在某些情况下,如果您有一组固定的
TaskManagers
,那么尽可能分散任务以利用共享的CPU资源实际上是有益的


为了支持这种调度策略,Flink社区通过添加了任务分散策略。为了使用更类似于FLIP-6之前的行为的调度策略,Flink尝试将工作负载分散到所有可用的
任务执行者
,需要在
Flink-conf.yaml

中设置
cluster.equired-spread-out-slots:true
,我认为您应该尝试询问Flink社区(user@flink.apache.org)--谢谢你,利奥,看来我应该听从你的建议!@A.Samiei我想知道你是否得到了Apache社区的回复,你能在这里分享吗?