Flink如何将DAG节点分配给不同的任务插槽?

时间:2019-02-14 07:18:15

标签: apache-flink flink-streaming

在阅读Flink教程示例时,我想知道Flink如何将DAG节点分配给Flink集群中的不同任务插槽。任何指针将不胜感激。

    val windowCounts = text
        .flatMap { w => w.split("\\s") }
        .map { w => WordWithCount(w, 1) }
        .keyBy("word")
        .timeWindow(Time.seconds(5), Time.seconds(1))
        .sum("count")

1 个答案:

答案 0 :(得分:1)

Flink在调度DAG时尝试执行的操作首先是尝试链接尽可能多的运算符。如果操作员有多个输入或随机播放,则链条通常会断裂。链将在Task上的单个TaskManager中执行,并且不涉及链式运算符之间的任何序列化。

在将输入DAG转换为Tasks之后,Flink将通过将Tasks分成子任务来并行化DAG。子任务接收并处理父任务输入的分区。

下一个Flink将为每个子任务分配一个插槽。如果为操作员启用了插槽共享(这是默认设置),则可以将来自不同操作员的子任务调度到相同的Slot。这不仅可以简化所需资源的原因,而且可以提高资源利用率。每个子任务都由单独的线程执行。

您可以找到有关Flink计划here的更多信息。

相关问题