flink任务提交流程

flink 任务 传参 flink任务提交_插槽

 

1. Client向HDFS上传Flink的Jar包和配置。

2. Client向Yarn ResourceManager提交任务。

3. ResourceManager分配Container资源并通知对应的NodeManager启动ApplicationMaster,ApplicationMaster启动后加载Flink的Jar包和配置构建环境,然后启动JobManager。

4. ApplicationMaster向ResourceManager申请资源启动TaskManager,ResourceManager分配Container资源后,由ApplicationMaster通知资源所在节点的NodeManager启动TaskManager。

5. NodeManager加载Flink的Jar包和配置构建环境并启动TaskManager,TaskManager启动后向JobManager发送心跳包,并等待JobManager向其分配任务。

任务调度原理

flink架构图

flink 任务 传参 flink任务提交_flink_02

 

Flink组成部分

  • Program Code

我们编写的 Flink应用程序代码。

  • Job Client

Job Client是任务执行的起点,负责接受用户的程序代码,然后创建数据流,将数据流提交给 Job Manager执行, 执行完成后,Job Client 将结果返回给用户。

  • JobManager

主进程(也称为作业管理器)协调和管理程序的执行。 它的主要职责包括安排任务,管理checkpoint ,故障恢复等。

机器集群中至少要有一个 master,master 负责调度 task,协调 checkpoints 和容灾,高可用设置的话可以有多个 master,但要保证一个是active, 其他是 standby; Job Manager 包含 Actor system(通信系统)、Scheduler(调度)、Check pointing 三个重要的组件。

  • Task Manager

从 Job Manager 处接收需要部署的 Task。Task Manager 是在JVM 中的一个或多个线程中执行任务的工作节点。 任务执行的并行性由每个 Task Manager 上可用的任务槽(task slot)决定。 每个任务代表分配给任务槽的一组资源。

例如,如果 Task Manager 有四个插槽,那么它将为每个插槽分配 25% 的内存。 可以在任务槽中运行一个或多个线程。 同一插槽中的线程共享相同的 JVM。 同一 JVM 中的任务共享 TCP 连接和心跳消息。Task Manager 的一个 Slot 代表一个可用线程,该线程具有固定的内存,注意 Slot 只对内存隔离,没有对 CPU 隔离。默认情况下,Flink 允许子任务共享 Slot,即使它们是不同 task 的 subtask,只要它们来自相同的 job。这种共享可以有更好的资源利用率。

Flink关键能力

  • 低时延:提供ms级时延的处理能力。
  • 高可用:JobManager支持主备模式,保证无单点故障。
  • 可扩展:TaskManager支持手动水平扩展。
  • Exactly Once:提供同步+异步快照机制,保证所有数据只处理一次。