【问题标题】:flink - cluster not using clusterflink - 集群不使用集群
【发布时间】:2016-02-24 15:11:23
【问题描述】:

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

Topology(我们还用这个词来表示 flink 吗?):

kafka (3 topics on different feeds) -> flatmap -> union -> map

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

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

【问题讨论】:

    标签: java apache-kafka apache-flink flink-streaming


    【解决方案1】:

    Flink 实际上是故意将你的作业安排在单个 TaskManager 上。为了理解它,让我快速解释一下 Flink 的资源调度算法。

    首先,在 Flink 世界中,一个 slot 可以容纳多个任务(operator 的并行实例)。事实上,它可以容纳每个算子的一个并行实例。原因是 Flink 不仅以流式方式执行流式作业,而且还执行批处理作业。 流式传输方式我的意思是 Flink 将你的数据流图的所有算子都联机,这样中间结果就可以直接流式传输到下游算子被消费掉。默认情况下,Flink 会尝试将每个算子的一项任务合并到一个插槽中。

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

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

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

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

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

    【讨论】:

    • 这有点道理。问题是当我将这个拓扑扩展到包括数百个 kafka 主题时。这些会散开吗?
    • Kafka 主题的数量对这里的展开不是决定性的,因为每个主题的一个任务将放在同一个槽中。每个主题的分区数量更多,因此每个源运算符的并行度决定了您需要多少个插槽。 DataStream API 还提供了 startNewResourceGroup() 方法,该方法强制将以下运算符放在不同的插槽中。据我所知,这还不适用于来源。我将验证并在必要时为其打开 JIRA 问题。
    【解决方案2】:

    问题是您正在一个未键控(未分组)流上构建global window,因此该窗口必须在一台机器上运行。

    也许您还可以以不同的方式表达您的应用程序逻辑,以便您可以对流进行分组。

    “(未设置)”部分可能是 Flink 的 DataStream API 中的一个问题,它没有设置默认的操作符名称。 针对DataSet API 实现的作业将如下所示:

    【讨论】:

    • 我回去查看有问题的代码,它是“键控”的。是否有其他原因导致它不会在集群中传播?
    • 哦,对不起。我的回答不是很准确。您在 Web 界面中看到的只是计划的逻辑表示。它并不代表算子在集群上是如何分布运行的。因此,即使窗口只有一个框,也不意味着它只能在一台机器上执行。在运算符图表下方的列表中,您可以看到不同的运算符。当您点击 Fast Tumbling Window 时,您可以看到运行该窗口的并行实例。
    • 当我单击 UI 下部的一个框时,它会打开以显示所有并行实例。这些报告中的每一个都在同一台机器上。
    • 那么在你的三节点集群上,你运行了多少个任务管理器?每个 TM 有多少个处理槽?
    • 我认为这个答案有些混乱。蒂尔在下面的回答解释了为什么会发生积极的共址。
    猜你喜欢
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2011-11-28
    相关资源
    最近更新 更多