这是我参与「第四届青训营 」笔记创作活动的第1天
调度
调度器是 Flink 作业执行的核心组件,管理作业执行的所有相关过程,包括 JobGraph 到 ExecutionGraph 的转换、作业生命周期管理(作业的发布、取消、停止)、作业的 Task 生命周期管理(Task 的发布、取消、停止)、资源申请与释放、作业和 Task 的 Failover 等。
调度有几个重要的组件:
调度器:SchedulerNG 及其子类、实现类
调度策略:SchedulingStrategy 及其实现类
调度模式:ScheduleMode 包含流和批的调度,有各自不同的调度模式
1 调度器
- 调度器作用:
-
- 1)作业的生命周期管理,如作业的发布、挂起、取消
- 2)作业执行资源的申请、分配、释放
- 3)作业的状态管理,作业发布过程中的状态变化和作业异常时的 FailOver 等
- 4)作业的信息提供,对外提供作业的详细信息
2 调度模式
- ScheduleMode 决定如何启动 ExecutionGraph 中的 Task。Flink 提供 3 中调度模式:
-
- 1)Eager 调度
- 适用于流计算。一次性申请需要的所有资源,如果资源不足,则作业启动失败。
- 2)分阶段调度
- LAZY_FROM_SOURCES 适用于批处理。从 SourceTask 开始分阶段调度,申请资源的时候,一次性申请本阶段所需要的所有资源。上游 Task 执行完毕后开始调度执行下游的 Task,读取上游的数据,执行本阶段的计算任务,执行完毕之后,调度后一个阶段的 Task,依次进行调度,直到作业完成。
- 3)分阶段 Slot 重用调度
- LAZY_FROM_SOURCES_WITH_BATCH_SLOT_REQUEST 适用于批处理。与分阶段调度基本一样,区别在于该模式下使用批处理资源申请模式,可以在资源不足的情况下执行作业,但是需要确保在本阶段的作业执行中没有 Shuffle 行为。
并发
slot和parallelism总结
-
- 1)slot是静态的概念,是指taskmanager具有的并发执行能力
-
- 2)parallelism是动态的概念,是指程序运行时实际使用的并发能力
-
- 3)设置合适的parallelism能提高运算效率,太多了和太少了都不行
parallelism的设定方式:
算子(operator)级别:可以通过设置flink的编程API修改过并行度;
运行环境级别:可以通过设置executionEnvironmentk的方法修改并行度;
客户端级别:可以通过设置$FLINK_HOME/bin/flink 的-p参数修改并行度;
系统级别:可以通过修改$FLINK_HOME/conf/flink-conf.yaml文件的方式更改并行度。