1 Flink 调度策略有哪些?

以下答案由土哥贡献:

Flink 1.14 版本以前 决定 task 的调度策略有两种,region / legacy配置参数jobmanager.scheduler.scheduling-strategy:region/legacy。

  1. region(PIPELINED_REGION_SCHEDULING):管道区域调度,默认调度策略。实现类PipelinedRegionSchedulingStrategy。
  2. legacy(LEGACY_SCHEDULING):传统调度。实现类有两个:EagerSchedulingStrategy主要用于流场景,立即调度所有task; LazyFromSourcesSchedulingStrategy主要用于批作业,下游task只在输入数据准备完毕才开始调度。

  1. 1.14.0 版本后,默认只有一种调度策略,即 Region 调度策略。在 Flink 中,region 是任务调度和 Failover 的基本单位。在调度的过程中,同一 region 内的所有 Task 节点都会被同时调度,而整个拓扑中所有 region 会按照拓扑顺序逐一进行调度。

同时,Flink 的调度层面有两种 region:

  • 逻辑层面的 Logical Pipelined Region;
  • 执行调度层面的 Scheduling Pipelined Region。

逻辑 region 由逻辑拓扑 (JobGraph) 中的节点 JobVertex 构成,而执行 region 则由执行拓扑 (ExecutionGraph) 中的节点 ExecutionVertex 构成。类似于 ExecutionVertex 基于 JobVertex 计算产生,执行 region 是由逻辑 region 计算得到的。

2 Flink 分发模式有几种?

以下答案由土哥、🙃 ɹǝ nᴉx贡献:

分发模式 (Distribution Pattern) 描述了上游节点与下游节点连接的方式。上游节点计算的结果会按照连边分发到下游节点。目前 Flink 中有两种分发模式:点对点 (Pointwise) 和全连接 (All-to-all)。全连接:优化前时间复杂度为O(n2),全连接:优化后 时间复杂度为:O(n);点对点:时间复杂度O(n)。

image.png

3 Flink 节点间数据交换类型有几种?

以下答案由土哥贡献:

目前 Flink 中节点间有两种数据交换类型:pipelined 和 blocking。

  1. 对于 blocking 的数据交换方式,结果分区会在上游全部计算完成后再交由下游进行消费,数据会持久化到本地,支持多次消费。
  2. 对于 pipelined 数据交换,上游结果分区的产出和下游任务节点的消费是同时进行的,所有数据不会被持久化且只能读取一次。

以上答案都在下文中可以找到

微信公众号-Flink1.14 版本作业调度性能优化 68倍!!!(强烈推荐)
摩天轮-Flink1.14 版本作业调度性能优化 68倍!!!(强烈推荐)