运行框架image.png

客户端

提交job的入口
bin/flink run…..


一个app中:

jobmanager

如果在yarn上,jobmanager就是appmaster,详情请看yarn-cluster提交流程per-job
进程级别,
每个应用一定有一个jobmanager,
高可用可有多个jobmanager

resourcesmanager

负责资源管理—>管理插槽
一个jobmanager对应一个resourcesmanager(与yarn的同名,但不是同一个)
如果在yarn上则会委托给yarn的resourcesmanager来执行

  1. 1. JobManager申请插槽资源时,ResourceManager会将有空闲插槽的TaskManager分配给JobManager
  2. 1. 如果ResourceManager没有足够的插槽来满足JobManager的请求,它还可以向资源提供平台发起会话,以提供启动TaskManager进程的容器
  3. 1. ResourceManager还负责终止空闲的TaskManager,释放计算资源。

dispatcher

  1. 1. 负责接收用户提供的作业,并且负责为这个新提交的作业启动一个新的**JobMaster **组件.
  2. 1. Dispatcher也会启动一个Web UI,用来方便地展示和监控作业执行的信息。

jobMaster

jobmanager 一个集群一个
jobmaster 类似于driver,每个job都会分配一个jobmaster


taskManager

进程级别
一个taskmanager(worker),一个container
一个nodemanager 可以给多个contaniner,所以一个nodemanager 可以起多个 taskmanager
向jobmanager注册插槽
taskmanager之间也会进行数据交换
一般是shuffler操作或并行度不一致,否则只会在本taskmanager进行跨slot

slot

slots(封装了内存,并共享cpu)
线程级别,线程不共享(线程安全)
内存均分
cpu可以共享


高级流程视角:

image.png

yarn-cluster提交流程per-job

image.png

  1. Flink任务提交后,Client向HDFS上传Flink的Jar包和配置
    2. 向Yarn ResourceManager提交任务,ResourceManager分配Container资源
    3. 通知对应的NodeManager启动ApplicationMaster,ApplicationMaster启动后加载Flink的Jar包和配置构建环境,然后启动JobManager
    4. ApplicationMaster向ResourceManager申请资源启动TaskManager
    5. ResourceManager分配Container资源后,由ApplicationMaster通知资源所在节点的NodeManager启动TaskManager
    6. NodeManager加载Flink的Jar包和配置构建环境并启动TaskManager
    7. TaskManager启动后向JobManager发送心跳包,并等待JobManager向其分配任务。