gpt4 book ai didi

java - flink - 集群不使用集群

转载 作者:行者123 更新时间:2023-11-30 06:11:39 24 4
gpt4 key购买 nike

我设置了一个 3 节点集群,该集群非常均匀地分配任务(步骤?作业?)直到最近的任务都分配给了一台机器。

拓扑(我们还用这个术语来表示 flink 吗?):

kafka(3 个关于不同提要的主题)-> flatmap -> union -> map

enter image description here

这个设置有什么东西可以告诉集群管理器将所有东西都放在一台机器上吗?

此外 - 图像中的“未设置”值是什么?我错过了一些步骤?或者一些待实现的 UI 功能?

最佳答案

实际上,Flink 是有意将您的作业调度到单个 TaskManager 上的。为了理解它,我快速解释一下Flink的资源调度算法。

首先,在 Flink 的世界里,一个槽可以容纳多个任务(算子的并行实例)。事实上,它可以容纳每个运算符的一个并行实例。这样做的原因是 Flink 不仅以流式方式执行流式作业,而且还以批处理作业。对于 streaming fashion,我的意思是 Flink 使数据流图的所有运算符在线,以便中间结果可以直接流式传输到下游运算符,在那里它们被使用。默认情况下,Flink 尝试将每个运算符的一项任务组合在一个槽中。

当 Flink 将任务调度到不同的槽时,它会尝试将任务与其输入放在一起,以避免不必要的网络通信。对于源,并置取决于实现。例如,对于基于文件的源,Flink 尝试将本地文件输入拆分分配给不同的任务。

因此,如果我们将此应用到您的工作中,那么我们会看到以下内容。你有三个不同的源,并行度 1。所有源都属于同一个资源共享组,因此每个运算符(operator)的单个任务将部署到同一个槽。初始槽是从可用实例中随机选择的(实际上它取决于TaskManagerJobManager注册的顺序)然后填充。假设所选插槽位于机器 node1 上。

接下来我们有三个平面 map 运算符,它们的并行度为 2。这里再次可以将每个平面 map 运算符的两个子任务之一部署到已经容纳三个源的同一槽中。然而,第二个子任务必须放在一个新的槽中。当发生这种情况时,Flink 会尝试选择一个空闲插槽,该插槽与部署任务输入之一的插槽位于同一位置(再次减少网络通信)。由于 node1 只有一个槽被占用,因此 31 仍然是空闲的,它会将每个 flatMap 运算符的第二个子任务也部署到 node1.

这同样适用于滚动窗口减少操作。 Flink 试图将 window operator 的所有任务与其输入放在一起。由于它的所有输入都在 node1 上运行,并且 node1 有足够的空闲槽来容纳窗口操作符的 6 个子任务,因此它们将被调度到 node1。重要的是要注意,1 个窗口任务将在包含每个 flatMap 运算符的三个源和一个任务的槽中运行。

我希望这能解释为什么 Flink 只使用单台机器的插槽来执行您的作业。

关于java - flink - 集群不使用集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33855348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com