1 Flink 调度策略有哪些?
以下答案由土哥贡献:
Flink 1.14 版本以前 决定 task 的调度策略有两种,region / legacy配置参数jobmanager.scheduler.scheduling-strategy:region/legacy。
- region(PIPELINED_REGION_SCHEDULING):管道区域调度,默认调度策略。实现类PipelinedRegionSchedulingStrategy。
- legacy(LEGACY_SCHEDULING):传统调度。实现类有两个:EagerSchedulingStrategy主要用于流场景,立即调度所有task; LazyFromSourcesSchedulingStrategy主要用于批作业,下游task只在输入数据准备完毕才开始调度。
在 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)。
3 Flink 节点间数据交换类型有几种?
以下答案由土哥贡献:
目前 Flink 中节点间有两种数据交换类型:pipelined 和 blocking。
- 对于 blocking 的数据交换方式,结果分区会在上游全部计算完成后再交由下游进行消费,数据会持久化到本地,支持多次消费。
- 对于 pipelined 数据交换,上游结果分区的产出和下游任务节点的消费是同时进行的,所有数据不会被持久化且只能读取一次。
以上答案都在下文中可以找到
微信公众号-Flink1.14 版本作业调度性能优化 68倍!!!(强烈推荐)
摩天轮-Flink1.14 版本作业调度性能优化 68倍!!!(强烈推荐)