本文主要介绍 Flink Runtime 的作业执行的核心机制。首先介绍 Flink Runtime 的整体架构以及 Job 的基本执行流程,然后介绍Flink 的Standalone运行架构,最后对Flink on YARN的两种模式进行了详细剖析。

Flink Runtime作业执行流程分析

整体架构图

Flink Runtime 层的主要架构如下图所示,它展示了一个 Flink 集群的基本结构。整体来说,它采用了标准 master-slave 的结构,master负责管理整个集群中的资源和作业;TaskExecutor 则是 Slave,负责提供具体的资源并实际执行作业。

执行流程分析

  • 组件介绍

Application Master 部分包含了三个组件,即 Dispatcher、ResourceManager 和 JobManager。其中,Dispatcher 负责接收用户提供的作业,并且负责为这个新提交的作业拉起一个新的 JobManager 组件。ResourceManager 负责资源的管理,在整个 Flink 集群中只有一个 ResourceManager。JobManager 负责管理作业的执行,在一个 Flink 集群中可能有多个作业同时执行,每个作业都有自己的 JobManager 组件。这三个组件都包含在 AppMaster 进程。 TaskManager主要负责执行具体的task任务,StateBackend 主要应用于状态的checkpoint。 Cluster Manager是集群管理器,比如Standalone、YARN、K8s等。

  • 流程分析

1.当用户提交作业的时候,提交脚本会首先启动一个 Client进程负责作业的编译与提交。它首先将用户编写的代码编译为一个 JobGraph,在这个过程,它还会进行一些检查或优化等工作,例如判断哪些 Operator 可以 Chain 到同一个 Task 中。然后,Client 将产生的 JobGraph 提交到集群中执行。此时有两种情况,一种是类似于 Standalone 这种 Session 模式,AM 会预先启动,此时 Client 直接与 Dispatcher 建立连接并提交作业即可。另一种是 Per-Job 模式,AM 不会预先启动,此时 Client 将首先向资源管理系统 (如Yarn、K8S)申请资源来启动 AM,然后再向 AM 中的 Dispatcher 提交作业。

2.当作业到 Dispatcher 后,Dispatcher 会首先启动一个 JobManager 组件,然后 JobManager 会向 ResourceManager 申请资源来启动作业中具体的任务。如果是Session模式,则TaskManager已经启动了,就可以直接分配资源。如果是per-Job模式,ResourceManager 也需要首先向外部资源管理系统申请资源来启动 TaskExecutor,然后等待 TaskExecutor 注册相应资源后再继续选择空闲资源进程分配,JobManager 收到 TaskExecutor 注册上来的 Slot 后,就可以实际提交 Task 了。

3.TaskExecutor 收到 JobManager 提交的 Task 之后,会启动一个新的线程来执行该 Task。Task 启动后就会开始进行预先指定的计算,并通过数据 Shuffle 模块互相交换数据。

Flink Standalone运行架构

Flink Standalone运行架构如下图所示:

Standalone模式需要先启动Jobmanager和TaskManager进程,每一个作业都是自己的JobManager。 Client:任务提交,生成JobGraph

JobManager:调度Job,协调Task,通信,申请资源

TaskManager:具体任务执行,请求资源

Flink On YARN运行架构

关于YARN的基本架构原理,详见另一篇我的另一篇文章YARN架构原理

Per-Job模式

Per-job 模式下整个 Flink 集群只执行单个作业,即每个作业会独享 Dispatcher 和 ResourceManager 组件。此外,Per-job 模式下 AppMaster 和 TaskExecutor 都是按需申请的。因此,Per-job 模式更适合运行执行时间较长的大作业,这些作业对稳定性要求较高,并且对申请资源的时间不敏感。

1.独享Dispatcher与ResourceManager

2.按需申请资源(TaskExecutor)

3.适合执行时间较长的大作业

Session模式

在 Session 模式下,Flink 预先启动 AppMaster 以及一组 TaskExecutor,然后在整个集群的生命周期中会执行多个作业。可以看出,Session 模式更适合规模小,执行时间短的作业。

1.共享Dispatcher与ResourceManager

2.共享资源

3.适合小规模,执行时间较短的作业

flink运行原理_Flink运行架构剖析相关推荐

  1. Serverless 实战 —— Serverless 的运行原理与组件架构

    Serverless 的运行原理与组件架构 本文重点探讨下开发者使用 Serverless 时经常遇到的一些问题,以及如何解决 过去一年,我们和大量 Serverless 用户进行了线上和线下的交流, ...

  2. 运行原理_JMeter运行原理

    前几篇我们讲解了JMeter的组成部分, 下面我们来了解JMeter的运行原理. 接触过LoadRunner的读者应该知道, LoadRunner可以选择是以进程方式还是以线程方式来运行, 在JMet ...

  3. ASP.NETt运行原理和运行机制

    当一个http请求发送过来并被IIS机收到之后,IIS首先通过你请求的页面类型为其加载相应的dll文件,然后在处理过程中将这条请求发送给能够处理这条请求的模块,而在ASP.NET中这个模块就叫做Htt ...

  4. ASP.NET运行原理和运行机制

    一.ASP.NET运行原理 当一个http(abbr. 超文本传输协议  hypertext transport protocol )请求发送过来并被IIS机收到之后,IIS(IIS 互联网信息服务信 ...

  5. JSP运行原理及运行过程

    学习J2EE时,初步了解了JSP,写过一篇小的总结:J2EE-JSP,当时还不是很了解它的运行机制. 学习DRP时,再次接触了JSP,在原来基础上有了更深的了解,了解了它的执行原理 1,JSP的运行原 ...

  6. MySQL运行原理与基础架构

    下面是关于上述部件的介绍: connectors 与其他编程语言中的sql 语句进行交互,如php.java等. Management Serveices & Utilities 系统管理和控 ...

  7. 怎么去观察php运行原理,php运行原理如何理解,具体看代码?

    PHP 测试 Hello World'; ?> 这个是一段简单的php代码,文件是hello.php,我通过www.xxx.com/hello.php请求这个页面的时候,php是如何解析数据返回 ...

  8. LoadRunner系统架构简介与运行原理

    1.LoadRunner系统架构简介 LoadRunner是通过创建虚拟用户来代替真实实际用户来操作客户端软件比如Internet Explorer,来向IIS.Apache等Web服务器发送HTTP ...

  9. flink运行原理_浅谈Flink分布式运行时和数据流图的并行化

    本文将以WordCount的案例为主线,主要介绍Flink的设计和运行原理.关于Flink WordCount程序可以参考我之前的文章:读取Kafka实时数据流,实现Flink WordCount.阅 ...

最新文章

  1. centos上安装anaconda并配置虚拟环境
  2. 李彦宏为什么被称为AI先生,美国权威媒体给出答案
  3. Android-Spinner的使用以及两种适配器
  4. Java 理论与实践: 正确使用 Volatile 变量--转
  5. PyQt5 笔记3 -- 信号与槽
  6. Angular 服务器端渲染的学习笔记(一)
  7. 更改apk安装包对android系统等级要求
  8. vc中关于 directx的配置,和dxsdk_extras(directshow)
  9. python读取文件特定内容_利用python代码获取文件特定的内容,并保存为文档
  10. 【python】Python基础语法及规范
  11. 关于最近Vue3+ Vue-CLI3+比较热门的十几篇文章
  12. centos yum 安装
  13. 数据分析为周杰伦打榜的夕阳红老年团,告诉你他们真实年龄!
  14. JUC和线程池的详细讲解
  15. Revit2018下载和安装教程
  16. G120XA与S7-1200的Modubus通信(一)
  17. 国内打开Cousera方法
  18. 【强化学习论文精读】Timeliness Guaranteed Traffic Flow Forecasting Based on Federated Online Learning
  19. 白话机器学习-Encoder-Decoder框架
  20. 利用sympy库求解常微分方程:dsolve()函数

热门文章

  1. oppo r11 android版本,OPPO R11手机一共有几个版本?各版本都有哪些区别?
  2. java 线程池 固定大小_使用Executors服务在Java中创建固定大小线程池的最佳方法...
  3. mysql gtid坑_通过mysqlbinlog --skip-gtids恢复后再备份可能造成的坑
  4. wordpress 每段首行空两格
  5. CC254x--BLE
  6. 学习 Spring Boot:(二十九)Spring Boot Junit 单元测试
  7. 使用Visio 2000逆向工程将代码转换为UML图表
  8. VC设置CEdit控件背景透明、文字背景也透明
  9. pro*C/C++支持c++开发实例
  10. React开发(172):React引入背景图片