flink-cluster未使用集群

uidvcgyl  于 2021-06-08  发布在  Kafka
关注(0)|答案(2)|浏览(523)

我设置了一个3节点的集群来分发任务(步骤?作业?)相当均匀,直到最近一次分配给一台机器。
拓扑学(我们还用这个词来形容Flink吗?): kafka (3 topics on different feeds) -> flatmap -> union -> map
这个设置是否告诉集群管理器将所有东西放在一台机器上?
另外-图像中的“未设置”值是什么?我错过了哪一步?还是一些要实现的ui功能?

46scxncf

46scxncf1#

实际上,Flink是故意把你的工作安排在一个taskmanager上的。为了理解它,让我快速解释一下flink的资源调度算法。
首先,在flink世界中,一个插槽可以容纳多个任务(操作符的并行示例)。实际上,它可以容纳每个操作符的一个并行示例。原因是flink不仅以流方式执行流作业,而且还执行批作业。使用流式方式,我的意思是flink使数据流图的所有操作符在线,这样中间结果就可以直接流到下游操作符,在那里它们被消费。默认情况下,flink尝试将每个操作符的一个任务合并到一个插槽中。
当flink将任务调度到不同的时隙时,它会尝试将任务与其输入一起定位,以避免不必要的网络通信。对于源,合用位置取决于实现。例如,对于基于文件的源,flink尝试将本地文件输入拆分分配给不同的任务。
所以如果我们把这个应用到你的工作中,那么我们会看到以下内容。你有三个不同的平行源1。所有源都属于同一个资源共享组,因此每个操作员的单个任务将部署到同一个插槽。初始插槽是从可用示例中随机选择的(实际上它取决于 TaskManager 注册地点 JobManager )然后装满了。假设选定的插槽在机器上 node1 .
接下来我们有三个平行度为2的平面Map操作符。在这里,每个平面图操作符的两个子任务中的一个子任务可以部署到已经容纳三个源的同一插槽中。然而,第二个子任务必须放在一个新的槽中。当这种情况发生时,flink会尝试选择一个空闲插槽,该插槽与部署任务输入的插槽位于同一位置(同样是为了减少网络通信)。因为只有一个插槽 node1 被占用,因此 31 仍然是免费的,它还将部署每个flatmap操作符的第二个子任务 node1 .
这同样适用于翻转窗口的reduce操作。flink试图将窗口操作符的所有任务与其输入一起定位。因为它的所有输入都是 node1 以及 node1 有足够的空闲插槽来容纳窗口操作员的6个子任务,它们将被安排为 node1 . 需要注意的是,一个窗口任务将在包含三个源代码和每个flatmap操作符的一个任务的插槽中运行。
我希望这能解释为什么flink只使用一台机器的插槽来执行你的任务。

chhkpiq4

chhkpiq42#

问题是,您正在一个无眼(未分组)流上构建一个全局窗口,因此该窗口必须在一台计算机上运行。
也许您还可以用不同的方式表达您的应用程序逻辑,以便对流进行分组。
(未设置)部分可能是flink的一个问题 DataStream api,它没有设置默认的运算符名称。针对 DataSet api将如下所示:

相关问题