【Flink】浅谈Flink架构和调度

news2024/9/23 7:27:15

【Flink】浅谈Flink架构和调度

Flink架构

Flink 是一个分布式系统,需要有效分配和管理计算资源才能执行流应用程序。它集成了所有常见的集群资源管理器,例如【Hadoop YARN】、【Apache Mesos】和【Kubernetes】,但也可以设置作为独立集群甚至库运行。

一个 Flink 集群运行时通常包含两类进程,JobManagerTaskManager,Flink 集群运行框架如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fMEEgRno-1675091889229)(E:/Postgraduate/document/ASSESTS/%E3%80%90Flink%E3%80%91%E6%B5%85%E8%B0%88Flink%E6%9E%B6%E6%9E%84%E5%92%8C%E8%B0%83%E5%BA%A6.assets/image-20230130201211000.png)]

Flink Client 并不是运行时和程序执行时的一部分,Client 的第一个作用是将用户代码变为数据流图,然后通过 Actor 通信系统将数据流图发送给 JobManager。数据流图发送完毕之后 Client 可以选择保持连接以接收进程报告、状态更新和 Job 结果;也可由选择断开连接,不论哪一种行为都不会影响 Flink-job 运行。Client 的第二个用途是触发执行 Java/Scala 程序,可以使用 ./bin/flink run 命令代替。

四层执行图

Flink 中的执行图可以分成四层:StreamGraph → JobGraph → ExecutionGraph → 物理执行图

  • StreamGraph:使用 API 生成的数据流图,表示程序的拓扑结构(位于客户端

  • JobGraph:StreamGraph 优化(例如合并算子链)后生成 JobGraph(位于客户端

  • ExecutionGraph:(JobGraph 按着并行度直接展开),JobMaster 根据 JobGraph 生成 ExecutionGraph,是 JobGraph 的并行化版本,是调度层最核心的数据结构(确定任务和所需的资源)(位于JobMaster

  • 物理执行图:JobMaster 根据 ExecutionGraph 对 Job 进行调度后在各个 TM 上部署任务后形成的图,并不是具体的数据结构(位于TaskManager)。

TaskManager

TaskManager(也称 worker,以下简称 TM)用于执行作业流的 Task,并缓存和交换数据流。就本质而言每⼀个 TM 都是⼀个 JVM 进程。

TaskSlot

TaskSlot 是一种静态概念,代表一个 TM 具有的并发执行能⼒。TM 通过 TaskSlot 来控制接受任务的数量。TM 中的 TaskSlot 接受 TM 的内存托管(均分),TaskSlot 内存隔离,但是 CPU 不隔离。具有多个 slot 意味着更多 subtask 也意味着更强的并发执行能力,多个 SubTask 共享 TCP 连接和心跳信息,此外他们还共享某些数据结构,种种优化措施极大减少了每个 SubTask task 的开销。在 1.13 版本,TaskSlot 的使用有两种模式:

  • 平铺计算:优势在于同⼀时间执行所有的步骤,劣势在于可能会出现资源利⽤率低(核心的问题在于资源密集型任务分配不均
  • 共享计算:Flink 的默认模式,其优势在于单个 TaskSlot 可以保存整个 Job-pipeline,将资源密集型和非密集型放到⼀起自行分配、利用资源。

并行度(parallelism)

并行度是一种动态概念,表示 TM 运⾏程序时实际使⽤的并发能⼒,直观理解就是一个 Task 设定了几个 SubTask。

  • 算子并行度 > TaskSlot 数量:集群的实际并行能力是 TaskSlot 的数量;
  • 算子并行度 < TaskSlot 数量:集群的实际并行能力是算子并行度;

在实际使用过程中,并行度>TaskSlot 会直接抛出异常。

JobManager

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

ResourceManager

ResourceManager 负责 Flink 集群中提供、回收、分配、管理 TaskSlots(Flink 最小的调度资源)。当 JobMaster 申请资源时,ResourceManager 会将有空闲 TaskSlot 的 TM 分配给 JobMaster。如果 ResourceManager 没有足够的资源,它还可以向资源提供平台发起会话,以提供启动 TM 进程的容器。Flink 为不同的环境和资源管理工具提供了不同资源管理器,比如 YARN、Mesos、K8s,以及 standalone 部署:

  • standalone 模式:ResourceManager 只能分配可用的 TM 的 slots,而不能自行启动新的 TM;
  • Yarn 模式:ResourceManager 向 Yarn 请求资源,Yarn 负责调配,可以启动新的 TM。

Dispatcher

Dispatcher 主要负责提供一个REST 接口,用来提交应用,每当客户端提交一个应用,Dispatch 就会启动一个新的 JobMaster,此外它还运行 Flink WebUI 用来提供作业执行信息。

JobMaster

JobMaster 是 JM 最核心的组件,JobMaster 负责管理单个 JobGraph 的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。在 Flink 集群中至少有一个 JobMaster,在高可用设置中还可以设置多个 JobMaster,它的主要工作如下:

  1. 接收客户端上传的应用程序,包括作业图(JobGraph)、逻辑数据流图(logical dataflow graph)和所有的类、库、其它资源的 JAR 包;

  2. 将作业图(JobGraph)转换成执行图(Execution Graph),包含所有可以并发执行的任务(SubTask);

  3. 向资源管理器(ResourceManager)请求执行任务必要的资源(此处的资源可以理解为 TaskSlot),一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的 TM 上。

小结

Flink 的运行架构已经在上面说明,现在看看实际运行过程中的逻辑架构,将上述抽象名词进行一个总结:

在这里插入图片描述

简而言之就是一个应用程序称之为 Flink-Job,一个 Flink-Job 包含多个 Task,每个 Task 包含多个 SubTask。

再举一个例子,很简单对数据流的处理就 4 个步骤,【source→map→keyby→sink】,现在假定一共两个 TM,每个 TM 有两个 TaskSlot,算子的并行度是 4,sink 的并行度是 2,那么在 TM 中的分配如下:

在这里插入图片描述

部署模式

Standalone模式

在这里插入图片描述

特点:ResourceManager 只能分配可用 TM 的 TaskSlots,而不能自行启动新的 TM。

  1. 客户端提交任务到 JM 的 Dispatcher;

  2. 分发器启动 JobMaster 组件;

  3. JobMaster 向资源管理器请求 Taskslots;

  4. 资源管理器向 TM 请求 Taskslots;

  5. TM 向 JobMaster 提供 Taskslots;

  6. JobMaster 分发任务给 TM 并执行。

YARN模式

YARN会话模式

在这里插入图片描述

特点:ResourceManager 向 Yarn 请求资源,Yarn 负责资源调配,可以启动新的 TM。

  1. 客户端提交任务到 JM 的分发器;

  2. 分发器启动 JobMaster 组件;

  3. JobMaster 向资源管理器请求 Taskslots;

  4. ResourceManager 向 Yarn 请求容器;

  5. YARN 启动带有 TM 的容器,TM 向 ResourceManager 注册 Taskslots;

  6. ResourceManager 向 TM 请求 Taskslots;

  7. TM 向 JobMaster 提供 Taskslots;

  8. JobMaster 分发任务并执行。

YARN单作业模式

在这里插入图片描述

特点:只有提交任务才会触发集群创建,任务直接提交到 Yarn。

  1. 客户端向 Yarn 提交任务;

  2. Yarn 启动带有 JM 的 Yarn Application Master;

  3. JobMaster 向 ResourceManager 请求 Taskslots;

  4. ResourceManager 向 Yarn 请求容器;

  5. YARN 启动带有 TM 的容器,TM 向 ResourceManager 注册 Taskslots;

  6. ResourceManager 向 TM 请求 slot;

  7. TM 向 JobMaster 提供 Taskslots;

  8. JobMaster 分发任务并执行。

往期回顾

  1. 【Flink】详解Flink的八种分区
  2. 【Flink】浅谈Flink背压问题(1)
  3. 【分布式】浅谈CAP、BASE理论(1)

文中难免会出现一些描述不当之处(尽管我已反复检查多次),欢迎在留言区指正,相关的知识点也可进行分享,希望大家都能有所收获!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ethercat系列(2)PDO动态映射设置过程

过程数据对象PDOPDO一般用于实时数据更新&#xff1b;其分为接收PDO&#xff08;RxPDO&#xff09;和发送PDO&#xff08;TxPDO&#xff09;&#xff0c;前者的数据流方向是主站到从站&#xff0c;TxPDO是从站到主站。PDO功能支持同步周期的刷新方式&#xff0c;也支持非周期性…

解决nacos2.1版本连接mysql8.x版本异常的问题

在测试环境部署nacos集群的时候使用的是mysql5.7版本&#xff0c;部署没有什么异常。但是在生产环境中我们使用的是mysql8.x版本&#xff0c;在启动nacos的时候各种报错。在网上看了很多解决办法花了挺长时间去排错也没有处理好问题网上最常见的两种方式修改pom文件&#xff1a…

代码随想录算法训练营第五十一天|309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费

动态规划 一、309.最佳买卖股票时机含冷冻期 题目&#xff1a; 给定一个整数数组&#xff0c;其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#x…

前端经典面试500题【上】

一阶段面试题集锦 1、 rem em vw vw 百分比区别 相同点&#xff1a; rem&#xff0c;em&#xff0c;vw&#xff0c;vh&#xff0c;vw属于前端开发除了px单位之外的另外几种单位取值&#xff1b;但是具体含义存在区别 不同点&#xff1a; px&#xff1a;是像素单位&#xff0c…

Databend 开源周报 第 78 期

Databend 是一款强大的云数仓。专为弹性和高效设计。自由且开源。 即刻体验云服务&#xff1a;https://app.databend.com 。 What’s New 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 Features & Improvements SQL 消除多余的 group by 标量 …

Docker查看正在运行的容器目录

起因 为了方便操作服务器&#xff0c;大部分都是使用宝塔面板操作的&#xff0c;在宝塔中我发现面板中用来管理Docker的工具使用起来非常方便&#xff0c;如下图&#xff1a; 可以看到宝塔的面板可以直接查看和从操作容器、Compose 、Compose 模板、镜像、网络、存储卷、仓库等…

2022年度总结:拒绝无效努力,实现破圈成长。

在从毕业一直到现在&#xff0c;我都会写一篇关于自己的从技术、商业、人情世故以及未来展望的博文&#xff0c;以至于归纳每个时期的自己&#xff0c; 走在互联网开发的边缘&#xff0c;不得不抽出时间鞭策自己学习新知识&#xff0c;未知的知识是 充满好奇的&#xff0c; 就好…

Centos 7 内核升级

参考 https://www.cnblogs.com/zengkefu/p/5667145.html 一、ELRepo 关于内核种类: kernel-ml 中的ml是英文【 mainline stable 】的缩写&#xff0c;elrepo-kernel中罗列出来的是最新的稳定主线版本。 kernel-lt 中的lt是英文【 long term support 】的缩写&#xff0c;elre…

分布式理论之体系结构

写在前面 分布式的体系结构目前有两种&#xff0c;第一种是集中式架构&#xff0c;也就是我们最常见到的master-slave架构&#xff0c;第二种是非集中式架构&#xff0c;也就是我们经常听到的去中心化架构&#xff0c;本文我们就一起来看下吧&#xff01; 1&#xff1a;集中式…

Android开发技术——车机技术之WMS学习

/ 窗口管理 / 窗口管理核心类介绍 窗口管理使用到的 DisplayContent&#xff0c;WindowToken 和 WindowState。 DisplayContent 用来管理一个逻辑屏上的所有窗口&#xff0c;有几个屏幕就会有几个 DisplayContent。使用 displayId 来区分。 处于不同 DisplayContent 的两个…

免费好用的IPv6之远程管理路由器-OpenWrt上uhttpd的TLS(HTTPS)部署流程介绍

在免费好用的IPv6之远程管理路由器-OpenWrt上uhttpd的使用介绍_123-wqy的博客-CSDN博客_openwrt uhttpd这篇文章的最后&#xff0c;我们已经可以使用80、443端口从路由器内外网的IPv6地址对路由器的WEB界面进行访问。但是&#xff0c;考虑外网访问场景下的安全性问题&#xff0…

初级软件测试面试会问什么 这些问题你都知道吗?

在现如今这竞争十分激烈的软件测试职场中&#xff0c;求职者们想获得一份让自己满意且高薪的工作是十分不易的&#xff0c;因此&#xff0c;只有事先做好充分准备才能让自己通关筹码加倍。在这里&#xff0c;我给各位即将踏入面试征程的初级软件测试小伙伴们准备了一些关于初级…

车载网络测试 - BootLoader刷写 - 总纲

随着车载以太网技术的快速发展&#xff0c;智能汽车也已经走进了千家万户&#xff0c;OTA无线解决方案也逐渐走进了大众的视野&#xff1b;实际上在车载以太网未出现之前&#xff0c;我们车上大多数使用的升级一般都是adb、U盘等不太方便的刷写方式&#xff0c;并且在车上是一种…

字节青训营——架构初探学习笔记

1. 规则引擎 规则引擎是一种嵌入在应用服务中的组件&#xff0c;可以将灵活多变的业务决策从服务代码中分离出来。通过使用预定义的语义模块来编写业务逻辑规则。在执行时接受数据输入、解释业务规则&#xff0c;并做出决策。规则引擎能大大提高系统的灵活性和扩展性。 在字节…

小波神经网络的时间序列预测模型

一、小波变换 波变换主要通过伸缩和平移实现多尺度细化&#xff0c;突出所要处理的问题细节&#xff0c;有效提取局部信息。 将傅里叶变换中无限长的三角函数基换成了有限长的会衰减的小波基。 小波变换不仅可以知道信号的频率成分&#xff0c;还能知道各频率成分出现的时刻…

Win10蓝屏问题:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED

最近一段时间&#xff0c;我一直出现蓝屏的情况&#xff0c; 以为是CPU散热不行导致的重启&#xff0c; 因为比较频繁所以在此记录解决这个问题&#xff0c; 还是一贯的风格&#xff1a;图文并茂。终止代码&#xff1a;SYSTEM_THREAD_EXCEPTION_NOT_HANDLED失败的操作&#xff…

关于灰度发布基本问题的解答及轻量化落地方案

由于工作需要&#xff0c;近期又恶补了一下“灰度发布”的相关知识&#xff0c;也和身边小伙伴探讨了轻量化实现灰度发布的落地方案。借此机会&#xff0c;正好将相关内容跟大家整理分享一下。 什么是灰度&#xff1f; 要想了解这个问题就要先明白什么是灰度。灰度从字面意思…

BGP综合实验(华为)

题目&#xff1a; 思路&#xff1a; 把路由划分在AS1,AS2,AS3之中&#xff0c;并使各网段之间的网络互通。明确交接端的路由的路由宣告在哪个区域&#xff0c;例如R1宣告在1.1.1.0 24 网段中&#xff08;易于识别的网段&#xff09;R1对应1.1.1.0网段。其他的路由器以此推类。利…

gma 地理空间绘图:(1)绘制简单的世界地图-1.地图绘制与细节调整

了解 gma gma 是什么&#xff1f; gma 是一个基于 Python 的地理、气象数据快速处理和数据分析函数包&#xff08;Geographic and Meteorological Analysis&#xff0c;gma&#xff09;。gma 网站&#xff1a;地理与气象分析库。 gma 的主要功能有哪些&#xff1f; 气候气象&a…

基于大数据的公共建筑能耗监测系统的应用探究

摘要&#xff1a;为了解决当前公共建筑能耗居高不下的突出问题&#xff0c;借助当前信息化技术手段&#xff0c;围绕公共建筑能耗监测系统中的大数据应用&#xff0c;从监测系统的总设计框架入手&#xff0c;分别就物联网中数据采集器设计方式、数据传输技术、数据库部署方式分…