Flink学习笔记(4)——Flink运行架构

news/2024/5/1 0:53:32/文章来源:https://blog.csdn.net/qq_64557330/article/details/127169517

目录

一、Flink运行时架构

1.1 系统架构

1.1.1 整体构成

1.1.2 作业管理器(JobManager)

1.1.3 任务管理器(TaskManager)

1.2 作业提交流程

1.2.1 高层级抽象视角

1.2.2 独立模式(Standalone)

1.2.3 YARN集群

1.3 一些重要概念

1.3.1 数据流图(Dataflow Graph)

1.3.2 并行度(Parallelism)

1.3.3 算子链

1.3.4 作业图(JobGraph)与执行图(ExecutionGraph)

1.3.5 任务(Tasks)和任务槽(Task Slots)

1.4 本章总结


一、Flink运行时架构

我们已经对 Flink 的主要特性和部署提交有了基本的了解,那它的内部又是怎样工作的, 集群配置设置的一些参数又到底有什么含义呢?

接下来我们就将钻研 Flink 内部,探讨它的运行时架构,详细分析在不同部署环境中的作 业提交流程,深入了解 Flink 设计架构中的主要概念和原理。

1.1 系统架构

 

1.1.1 整体构成

Flink 的运行时架构中,最重要的就是两大组件:作业管理器(JobManger)和任务管理器 (TaskManager)。对于一个提交执行的作业,JobManager 是真正意义上的“管理者”(Master), 负责管理调度,所以在不考虑高可用的情况下只能有一个;而 TaskManager 是“工作者” (Worker、Slave),负责执行任务处理数据,所以可以有一个或多个。Flink 的作业提交和任务 处理时的系统如图 4-1 所示。

 

 

1.1.2 作业管理器(JobManager)

JobManager 是一个 Flink 集群中任务管理和调度的核心,是控制应用执行的主进程。也就 是说,每个应用都应该被唯一的 JobManager 所控制执行。当然,在高可用(HA)的场景下,可能会出现多个 JobManager;这时只有一个是正在运行的领导节点(leader),其他都是备用 节点(standby)。 JobManger 又包含 3 个不同的组件,下面我们一一讲解。

 

1.1.3 任务管理器(TaskManager)

TaskManager 是 Flink 中的工作进程,数据流的具体计算就是它来做的,所以也被称为 “Worker”。Flink 集群中必须至少有一个 TaskManager;当然由于分布式计算的考虑,通常会 有多个 TaskManager 运行,每一个 TaskManager 都包含了一定数量的任务槽(task slots)。Slot是资源调度的最小单位,slot 的数量限制了 TaskManager 能够并行处理的任务数量。

启动之后,TaskManager 会向资源管理器注册它的 slots;收到资源管理器的指令后,TaskManager 就会将一个或者多个槽位提供给 JobMaster 调用,JobMaster 就可以分配任务来执 行了。在执行过程中,TaskManager 可以缓冲数据,还可以跟其他运行同一应用的 TaskManager交换数据。

1.2 作业提交流程

了解了 Flink 运行时的基本组件和系统架构,我们再来梳理一下作业提交的具体流程。

1.2.1 高层级抽象视角

Flink 的提交流程,随着部署模式、资源管理平台的不同,会有不同的变化。首先我们从 一个高层级的视角,来做一下抽象提炼,看一看作业提交时宏观上各组件是怎样交互协作的。

 

如图 4-2 所示,具体步骤如下:

(1) 一般情况下,由客户端(App)通过分发器提供的 REST 接口,将作业提交给

JobManager。

(2)由分发器启动 JobMaster,并将作业(包含 JobGraph)提交给 JobMaster。

(3)JobMaster 将 JobGraph 解析为可执行的 ExecutionGraph,得到所需的资源数量,然后 向资源管理器请求资源(slots)。

(4)资源管理器判断当前是否由足够的可用资源;如果没有,启动新的 TaskManager。

(5)TaskManager 启动之后,向 ResourceManager 注册自己的可用任务槽(slots)。

(6)资源管理器通知 TaskManager 为新的作业提供 slots。

52

(7)TaskManager 连接到对应的 JobMaster,提供 slots。

(8)JobMaster 将需要执行的任务分发给 TaskManager。

(9)TaskManager 执行任务,互相之间可以交换数据。

如果部署模式不同,或者集群环境不同(例如 Standalone、YARN、K8S 等),其中一些步 骤可能会不同或被省略,也可能有些组件会运行在同一个 JVM 进程中。比如我们在上一章实 践过的独立集群环境的会话模式,就是需要先启动集群,如果资源不够,只能等待资源释放, 而不会直接启动新的 TaskManager。

接下来我们就具体介绍一下不同部署环境下的提交流程。

1.2.2 独立模式(Standalone)

在独立模式(Standalone)下,只有会话模式和应用模式两种部署方式。两者整体来看流 程是非常相似的:TaskManager 都需要手动启动,所以当 ResourceManager 收到 JobMaster 的 请求时,会直接要求 TaskManager 提供资源。而 JobMaster 的启动时间点,会话模式是预先启 动,应用模式则是在作业提交时启动。提交的整体流程如图 4-3 所示。

我们发现除去第 4 步不会启动 TaskManager,而且直接向已有的 TaskManager 要求资源, 其他步骤与上一节所讲抽象流程完全一致。

1.2.3 YARN集群

接下来我们再看一下有资源管理平台时,具体的提交流程。我们以 YARN 为例,分不同 的部署模式来做具体说明。

1. 会话(Session)模式

在会话模式下,我们需要先启动一个 YARN session,这个会话会创建一个 Flink 集群

 这里只启动了 JobManager,而 TaskManager 可以根据需要动态地启动。在 JobManager 内部,由于还没有提交作业,所以只有 ResourceManager 和 Dispatcher 在运行,如图 4-4 所示。

接下来就是真正提交作业的流程,如图 4-5 所示:

(1)客户端通过 REST 接口,将作业提交给分发器。

(2)分发器启动 JobMaster,并将作业(包含 JobGraph)提交给 JobMaster。

(3)JobMaster 向资源管理器请求资源(slots)。

(4)资源管理器向 YARN 的资源管理器请求 container 资源。

(5)YARN 启动新的 TaskManager 容器。

(6)TaskManager 启动之后,向 Flink 的资源管理器注册自己的可用任务槽。

(7)资源管理器通知 TaskManager 为新的作业提供 slots。

(8)TaskManager 连接到对应的 JobMaster,提供 slots。

(9)JobMaster 将需要执行的任务分发给 TaskManager,执行任务。

可见,整个流程除了请求资源时要“上报”YARN 的资源管理器,其他与 4.2.1 节所述抽 象流程几乎完全一样。

2. 单作业(Per-Job)模式

在单作业模式下,Flink 集群不会预先启动,而是在提交作业时,才启动新的 JobManager。

具体流程如图 4-6 所示。

 

(1)客户端将作业提交给 YARN 的资源管理器,这一步中会同时将 Flink 的 Jar 包和配置 上传到 HDFS,以便后续启动 Flink 相关组件的容器。

(2)YARN 的资源管理器分配 Container 资源,启动 Flink JobManager,并将作业提交给

JobMaster。这里省略了 Dispatcher 组件。

(3)JobMaster 向资源管理器请求资源(slots)。

(4)资源管理器向 YARN 的资源管理器请求 container 资源。

(5)YARN 启动新的 TaskManager 容器。

(6)TaskManager 启动之后,向 Flink 的资源管理器注册自己的可用任务槽。

(7)资源管理器通知 TaskManager 为新的作业提供 slots。

(8)TaskManager 连接到对应的 JobMaster,提供 slots。

(9)JobMaster 将需要执行的任务分发给 TaskManager,执行任务。

可见,区别只在于 JobManager 的启动方式,以及省去了分发器。当第 2 步作业提交给

JobMaster,之后的流程就与会话模式完全一样了。

3. 应用(Application)模式

应用模式与单作业模式的提交流程非常相似,只是初始提交给 YARN 资源管理器的不再 是具体的作业,而是整个应用。一个应用中可能包含了多个作业,这些作业都将在 Flink 集群 中启动各自对应的 JobMaster。

1.3 一些重要概念

我们现在已经了解 Flink 运行时的核心组件和整体架构,也明白了不同场景下作业提交的具体流程。但有些细节还需要进一步思考:一个具体的作业,是怎样从我们编写的代码,转换成TaskManager 可以执行的任务的呢?JobManager 收到提交的作业,又是怎样确定总共有多 少任务、需要多少资源呢?接下来我们就从一些重要概念入手,对这些问题做详细的展开讲解。

1.3.1 数据流图(Dataflow Graph)

 

1.3.2 并行度(Parallelism)

我们已经清楚了算子和数据流图的概念,那最终执行的任务又是什么呢?容易想到,一个 算子操作就应该是一个任务。那是不是程序中的算子数量,就是最终执行的任务数呢?

 

 

 

1.3.3 算子链

 

1. 算子间的数据传输

回到上一小节的例子,我们先来考察一下算子任务之间数据传输的方式。

2. 合并算子链

在 Flink 中,并行度相同的一对一(one to one)算子操作,可以直接链接在一起形成一个 “大”的任务(task),这样原来的算子就成为了真正任务里的一部分,如图 4-11 所示。每个 task

60

会被一个线程执行。这样的技术被称为“算子链”(Operator Chain)。

 

1.3.4 作业图(JobGraph)与执行图(ExecutionGraph)

 

 

 

1.3.5 任务(Tasks)和任务槽(Task Slots)

 

 

 

 

 

 

1.4 本章总结

在这一章,我们在之前部署运行的基础上,深入介绍了 Flink 的系统架构和不同组件,并 进一步针对不同的部署模式详细讲述了作业提交和任务处理的流程。此外,通过展开讲解架构 中的一些重要概念,解答了 Flink 任务调度的核心问题,并对分布式流处理架构的设计做了思 考分析。

本章内容不仅是 Flink 架构知识的学习,更是分布式处理思想的入门。我们可以通过 Flink

这样一个经典框架的学习,触摸到分布式架构的底层原理。 Flink 流处理架构设计还涉及事件时间、状态管理以及检查点等重要概念,保证分布式流 处理系统的低延迟、时间正确性和状态一致性。我们将在后面的章节对这些内容做详细展开。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_18659.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud 使用 Turbine 聚合监控 Hystrix 健康状态

Hystrix 的降级熔断,只是被迫的折中方案,并不是我们所期望的结果,我们还是期望系统能够永远健康运行。绝大多数情况下,一个系统有很多微服务组成,在高峰期很可能个别微服务会发生降级熔断,我们必须能够通过监控才行,这样才能快速发现并解决问题。 Hystrix 是 Netflix 的…

soc的核间通信机制-->mailbox

对于mailbox,这个东西其实看到了很多次,但是一直不知道是啥。这里大概看了一下,知道了为甚有这个玩意儿,以及这个玩意相关的有啥,至于具体怎么使用,以及详细的工作原因等着以后再说吧。 正文 目前很多芯片…

微信小程序开发实战(SM周期及WXS脚本)

作者 : SYFStrive 博客首页 : HomePage 📜: 微信小程序 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f4…

webshell 提权

在我们使用cve或者其他方式获取shell 后 python -c import pty;pty.spawn("/bin/bash") 获取一个交互式的bash shell 使用id 命令可以查看当前的用户权限 查看当前的linux 系统版本 利用kali自带的漏洞检索库检索漏洞 searchsploit privilege | grep -i linux |…

【MySQL】数据库介绍以及MySQL数据库

目录 数据库介绍 数据库概述 数据表 MySql数据库 MySql安装 登录MySQL数据库 ​​​​​​​SQLyog(MySQL图形化开发工具) 数据库介绍 数据库概述 什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统&#…

实训任务1:Linux基本操作

文章目录一、实训目的二、实训要求三、实训任务1、创建并配置三个虚拟机2、创建SSH连接3、实现IP地址与主机名的映射4、关闭和禁用防火墙5、创建目录结构6、压缩打包7、安装软件包8、创建脚本文件9、直接运行脚本10、虚拟机相互免密登录11、远程拷贝文件一、实训目的 通过实训…

代谢组学和宏基因组学研究不同添加剂对青贮品质的影响

​ 发表期刊:Bioresource Technology 影响因子:9.642 百趣生物提供服务:代谢组学宏基因组 研究背景 人口增长促进了全球肉类和牛奶消费量增加,养殖所需饲料用量也逐年上升,发酵后的饲料是进行农副产品处理更好的选…

大数据技术Spark3.0详解

一、Spark3.0 简介 Spark3.0版本包含了3400多个补丁程序,是开源社区做出巨大贡献的最高峰,带来了Python和SQL功能的重大进步,并着眼于探索和生产的易用性。 1、Spark3.0新功能 (1)通过自适应查询执行,动…

基于物联网的智能厨房安全监测系统-上位机程序

CSDN话题挑战赛第2期 参赛话题:学习笔记 博客写作背景----项目中解决的问题 最近遇到一个基于TCP/IP网络的远程智能物联网系统,采用Arduino Uno控制器作为下位机,采用LabVIEW作为远程监控软件,两者通过网络实现通信。初步定为使…

2022/10/4——基于stm32mp157a的M4核的中断实验

本次实验采用STM32CubeMX软件进行元器件的初始化 本次实验采用的中断源为三个按键和光电开关、火焰传感器、人体红外。其实验接口分别为: key1------>PF9 key2------>PF7 key3------>PF8(检测方式:下降沿) 光电开…

详解欧拉计划第107题:最小网络

下面这个无向网络包含有7个顶点和12条边,其总重量为243。 这个网络也可以用矩阵的形式表示如下。 ABCDEFGA-161221---B16--1720--C12--28-31-D211728-181923E-20-18--11F--3119--27G---231127-然而,我们其实可以优化这个网络,移除其中的一些边&#

windows幻灯片壁纸

幻灯片设置10秒设置为10秒 win+r输入regedit 查找路径 HKEY_CURRENT_USER\Control Panel\Personalization\Desktop Slideshow 修改interval文件没有就创建一个 修改10进制文件 60000(毫秒为60秒)改为10000(毫秒为10秒)即可 修改后点击幻灯片放映他自己设置为10分钟不用管他已经…

深入分析vhost-user网卡实现原理 —— VirtIO Features协商

文章目录前言数据结构设备模型deviceVirtIONetPCIVirtIONetNICStateNetClientStatenetdevNetVhostUserStatevhost_netvhost_devchardevchardevChardevClassSocketChardevFeaturesVirtIONetVirtIODevicevhost_devNetVhostUserStatefeature_bitsBackend流程详解启动过程网络连接网…

【Docker Desktop】Neo4j

1、下载neo4j并启动 docker run --rm --name testneo4j -p 7474:7474 -p 7687:7687 -d -v C:/Users/ASUS/Desktop/neo4j/data:/data -v C:/Users/ASUS/Desktop/neo4j/logs:/logs -v C:/Users/ASUS/Desktop/neo4j/import:/var/lib/neo4j/import -v C:/Users/ASUS/Desktop/neo4j…

Mysql出现问题:慢查询日志失效解决方案

❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主&#x1f3…

【C++入门】学习使用二维数组基本知识及用法详解

🧛‍♂️iecne个人主页::iecne的学习日志 💡每天关注iecne的作品,一起进步 💪一起学习,必看iecne 🐳希望大家多多支持🥰一起进步呀! 文章目录一.定义方式1.1…

深度学习进阶-自然语言处理-04-基于计数的方法(上)

语料库:大量的文本数据 语料库通常采用树的结构,我们这里的与料理假定没有添加任何标签,在实际项目中,一般都会给文本数据添加标签(如,词性) 1 语料库的预处理 步骤一:创建单词列表 #样本文章…

JavaScript学习笔记:Navigator

<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script>// BOM// 浏览器对象模型// BOM可以使我们通过js来操作浏览器// 在BOM中为我们提供了一组对象&#xff0c;用来完成对浏览器的操作// BOM对象/…

基本控件案例集锦(下)

基本控件案例集锦&#xff08;下&#xff09; DatePicker&#xff0c;TimePicker&#xff0c;AlertDialoig 1.DatePicker 1.1简介 1.简介&#xff1a; Android为用户提供显示日期与时间的控件DatePicker和TimePicker。 日期选择控件(DatePicker)主要功能是向用户提供包含年…

JS面向对象之构造函数和原型(2)

文章目录1.构造函数1-1.使用构造函数面向对象1-2.构造函数里面的原型prototype1-3.对象原型__proto__1-4.constractor构造函数1-5.构造函数、实例、原型对象三者之间的关系1.构造函数 1-1.使用构造函数面向对象 ES6之前对象的公共部分&#xff0c;不是使用类解决的&#xff0…