flink运行时架构
此文章主要描述flink的运行时架构,包括组件,提交,任务调度等
flink环境安装
https://www.cnblogs.com/linjiqin/p/12425584.html
flink运行时的组件
作业管理器(jobmanager),任务管理器(taskmanager), 资源管理器(Resource),分发器(Dispacher)
jobmanager
控制一个应用程序执行的主进程,应用程序包括:作业图,逻辑数据流图,和打包了所有类,库和其他资源的jar包
jobmanager会将jobGraph(作业图)转换成一个物理层面的数据流图,叫做执行图(Execution Graph),包含了所有可以并发执行的任务
taskmanager
真正执行的任务的,包含一定数量的插槽(slots),限制了其能够执行的任务数量
每一个taskmanager都是一个jvm进程,在独立的线程上执行一个或多个子任务,slot来控制一个taskmanager可以接受多少个task。slot主要隔离的是内存,推荐值为cpu核数
默认情况下flink允许任务共享slot
taskmanager互相执行期间可以交换数据
修改并行度
优先级由低到高:flink-conf.yaml -> 启动时./bin/flink -p 2 -> 代码中env设置 -> 单独算子设置并行度
Resource
主要负责管理taskmanager的插槽(slots)
Dispacher
主要为应用提交提供了Rest接口,提供web ui
任务提交流程
standalone模式
yarn模式
任务调度原理
taskmanager和slots
slot个数选择,只需要考虑并行度最大的算子的并行度,即需要的最小的slot数
程序和数据流(DataFlow)
每个flink程序有source,transformation和sink组成,分别对应读取数据源,处理加工,结果数据输出
flink程序还被映射成dataflow(有向无环图),总是以一个或多个sources开始以一个多个sink结束
执行图
并行(parallelism)
数据并行,任务并行,作业并行
flink中的并行度一般说的是数据并行。一个特定算子的子任务的个数被称之为其并行度,一个stream的并行度,可以认为就是其所有算子中最大的并行度。
任务链:即flink会在从streamgraph到jobgraph时会进行任务的合并: