Flink 运行架构

Flink 调度

Flink-执行逻辑

文章目录

    • 一.角色作用
    • 二.任务提交流程
      • 1.1 Standlone
      • 1.2 Yarn
    • 三.TaskManager和slots原理
      • 3.1 作用与关系
      • 3.2 共享机制

一.角色作用

Client

Client 为提交 Job 的客户端,可以是运行在任何机器上(与 JobManager 环境连通即可)。提交 Job 后,Client 可以结束进程(Streaming的任务),也可以不结束并等待结果返回。

JobManager

JobManager 具有许多与协调 Flink 应用程序的分布式执行有关的职责:它决定何时调度下一个 task(或一组 task)、对完成的 task 或执行失败做出反应、协调 checkpoint、并且协调从失败中恢复等等。这个进程由三个不同的组件组成:

  • ResourceManager 负责 Flink 集群中的资源提供、回收、分配 - 它管理 task slots,这是 Flink 集群中资源调度的单位。Flink 为不同的环境和资源提供者(例如 YARN、Mesos、Kubernetes 和 standalone 部署)实现了对应的 ResourceManager。在 standalone 设置中,ResourceManager 只能分配可用 TaskManager 的 slots,而不能自行启动新的 TaskManager。
  • Dispatcher 提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 用来提供作业执行信息。
  • JobMaster 负责管理单个JobGraph的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。

始终至少有一个 JobManager。高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby。

TaskManager

TaskManager 在启动的时候就设置好了槽位数(Slot),每个 slot 能启动一个 Task,Task 为线程。从 JobManager 处接收需要部署的 Task,部署启动后,与自己的上游建立连接,接收数据并处理。

Slot

Flink 集群是由 JobManager(JM)、TaskManager(TM)两大组件组成的,每个 JM/TM 都是运行在一个独立的 JVM 进程中。JM 相当于 Master,是集群的管理节点,TM 相当于 Worker,是集群的工作节点,每个 TM 最少持有 1 个 Slot,Slot 是 Flink 执行 Job 时的最小资源分配单位,在 Slot 中运行着具体的 Task 任务。

二.任务提交流程

1.1 Standlone

Flink 运行架构_第1张图片

([图片地址](https://www.jianshu.com/p/f1b16b74afe3))
  1. APP程序通过RestFul接口提交给Dispatcher(接口是跨平台,并且可以直接穿过防火墙,不考虑拦截)。
  2. Dispatcher把JobManager进程启动,把应用交给JobManager。
  3. JobManager拿到应用后,向ResourceManager申请资源(slots),ResourceManager会启动对应的TaskManager进程,TaskManager空闲的slots会向ResourceManager注册。
  4. ResourceManager会根据JobManager申请的资源数量,向TaskManager发出指令(这些slots由你提供给JobManager)。
  5. TaskManager可以直接和JobManager通信了(它们之间会有心跳包的连接),TaskManager向JobManager提供slots,JobManager向TaskManager分配在slots中执行的任务。
  6. 最后,在执行任务过程中,不同的TaskManager会有数据之间的交换。

1.2 Yarn

Flink 运行架构_第2张图片

  1. 提交App之前,先上传Flink的Jar包和配置到HDFS,以便JobManager和TaskManager共享HDFS的数据。
  2. 客户端向ResourceManager提交Job,ResouceManager接到请求后,先分配container资源,然后通知NodeManager启动ApplicationMaster。
  3. ApplicationMaster会加载HDFS的配置,启动对应的JobManager,然后JobManager会分析当前的作业图,将它转化成执行图(包含了所有可以并发执行的任务),从而知道当前需要的具体资源。
  4. 接着,JobManager会向ResourceManager申请资源,ResouceManager接到请求后,继续分配container资源,然后通知ApplictaionMaster启动更多的TaskManager(先分配好container资源,再启动TaskManager)。container在启动TaskManager时也会从HDFS加载数据。
  5. 最后,TaskManager启动后,会向JobManager发送心跳包。JobManager向TaskManager分配任务。

三.TaskManager和slots原理

每个 worker(TaskManager)都是一个 JVM 进程,可以在单独的线程中执行一个或多个 subtask。为了控制一个 TaskManager 中接受多少个 task,就有了所谓的 task slots(至少一个)。

3.1 作用与关系

Flink 运行架构_第3张图片

  1. Flink 中每一个 TaskManager 都是一个JVM进程,它可能会在独立的线程上执行一个或多个 subtask。
  2. 为了控制一个 TaskManager 能接收多少个 task, TaskManager 通过 task slot 来进行控制(一个 TaskManager 至少有一个 slot)
  3. 每个task slot表示TaskManager拥有资源的一个固定大小的子集。假如一个TaskManager有三个slot,那么它会将其管理的内存分成三份给各个slot(注:这里不会涉及CPU的隔离,slot仅仅用来隔离task的受管理内存)
  4. 可以通过调整task slot的数量去自定义subtask之间的隔离方式。如一个TaskManager一个slot时,那么每个task group运行在独立的JVM中。而当一个TaskManager多个slot时,多个subtask可以共同享有一个JVM,而在同一个JVM进程中的task将共享TCP连接和心跳消息,也可能共享数据集和数据结构,从而减少每个task的负载。

3.2 共享机制

Flink 运行架构_第4张图片

  1. 默认情况下,Flink 允许子任务共享 slot,即使它们是不同任务的子任务(前提是它们来自同一个job)。 这样的结果是,一个 slot 可以保存作业的整个管道。
  2. Task Slot 是静态的概念,是指 TaskManager 具有的并发执行能力,可以通过参数taskmanager.numberOfTaskSlots进行配置;而并行度parallelism是动态概念,即TaskManager运行程序时实际使用的并发能力,可以通过参数parallelism.default进行配置。
  3. 举例:如果总共有3个TaskManager,每一个TaskManager中分配了3个TaskSlot,也就是每个TaskManager可以接收3个task,这样我们总共可以接收9个TaskSot。但是如果我们设置parallelism.default=1,那么当程序运行时9个TaskSlot将只有1个运行,8个都会处于空闲状态,所以要学会合理设置并行度!

slot 是指 taskmanager 的并发执行能力

Flink 运行架构_第5张图片

每一个 taskmanager 中的分配 3 个 TaskSlot, 3 个 taskmanager 一共有 9 个 TaskSlot。

parallelism 是指 taskmanager 实际使用的并发能力

Flink 运行架构_第6张图片

parallelism.default:1

运行程序默认的并行度为 1,9 个 TaskSlot 只用了 1 个,有 8 个空闲。设置合适的并行度才能提高效率。

parallelism 是可配置、可指定的

Flink 运行架构_第7张图片

每个算子设置的并行度是 2。

Flink 运行架构_第8张图片

每个算子设置的并行度是 9。

parallelism 是可配置、可指定的,引入Sink

除了 sink 是设置的并行度为 1,其他算子设置的并行度都是 9。

注意:如果设置的并行度 parallelism 超过了 Task Manager 能提供的最大 slot 数量,程序会抛异常信息。

Flink 运行架构_第9张图片

Flink 运行架构_第10张图片

参考

https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/concepts/flink-architecture.html#taskmanagers

https://www.slideshare.net/robertmetzger1/apache-flink-hands-on

公众号

Flink 运行架构_第11张图片

微信号:bigdata_limeng

你可能感兴趣的:(Flink实战,大数据,Flink)