Apache Flink细粒度资源管理原理

news2024/12/25 16:05:13
粗粒度资源管理
  • Apache Flink 1.1.4版本之前使用的是粗粒度的资源管理,即每个算子Slot Request所需要的资源都是未知的,Flink内部用UNKNOWN的特殊值来表示,这个值可以和任意资源规则的物理Slot匹配,站在Taskmanager的角度,他拥有的Slot个数与Slot资源是根据Flink的配置决定的。如下案例:

在这里插入图片描述

  • 以上Flink处理kafka source 数据map处理 sink到 Redis中,可能需要三个task ,分别对应source, map,sink
  • 粗粒度的资源控制,简单的将所有task任务运行在同一个SlotSharingGroup(SSG)就可以横好利用资源,因为我们这个链路中并发度上下游是完全一样的。此时我们只需要调整默认的Slot配置及可以达到很高的资源利用率
  • 同时由于不同Task特点峰值不一定相同,当一个任务消耗减少,额外资源可以被另外一个消耗增加的任务使用,这被称为削峰填谷效应,通过这种效应,将不同task放到同一个大的slot里面,可以进一步降低整体的资源开销
  • 简单任务的粗粒度资源调度特点如下:
    • 对于所有任务具有相同的并行度的作业处理,每个slot将包含一个完整的管道,理想情况下,所有管道应该使用大致相同的资源,这可以通过调整相同Slot的资源轻松满足(所有任务资源要求一致)
    • 任务资源消耗随着时间变化而变化,当一个任务消耗减少时候,额外的资源可以被另外一个消耗增加的任务使用,这被称为削峰填谷效应,减少所需要的整体资源(flink自己的优化)
粗粒度资源管理的弊端
  • 任务流程每个处理节点并行度不同而且差距很大

  • 任务流程每个处理节点资源要求相差很大比如Source/Sink/转换操作的tasks并行性可能受到外部上下游系统分区和IO负载的限制。有的计算密集型需要更多CPU,有的存储资源使用密集型需要更多内存,有的需要GPU

  • 对于批处理作业,并非所有任务都可以同时执行,因此,管道的顺势资源需求随时间变化而变化

  • 当整个管道需要资源非常庞大,单Slot/TaskManager无法提供,在这种情况下,需要将管道拆分成多个SSG(SlotSharingGroup),这些SSG可能并不总是具有相同的资源需求。

  • 总结:用相同资源设置的Slot执行所有任务可能造成资源的浪费。应为每个Slot都是相同的资源必须,那么这个Slot必须满足于流程处理中最高要求的节点处理,当某个节点处理需要用到GPU时候,这种浪费就变得不可接受了。

细粒度资源管理
  • 用如下案例解释粗粒度到细粒度资源管理的优势和流程
    在这里插入图片描述

  • 如上案例,Flink处理流转关系图中有两个128并发的Kafka Source和一个32并发的Redis ,上下两路数据处理路径,一条是两个Kafka Source经过Join以后在经过一些AGG聚合操作,最后将数据Sink到16并发的Kafka中;另一个链路Kafka Source 和Redis 进行Join,结果流入到一个鹅机遇TensorFlow的处理模块,最终存储到8个并发的Redis中。

  • 以上作业并发不一致,如果统一Slot资源只能是128并发

  • 对于较重的资源消耗的算子,导致很高的资源浪费(主要是内存),比如,Redis需要将数据缓存到内存提高性能,聚合则需要大量的managed memory存储state,对于这两本了只要申请32 和16份资源,对其后需要128份,那么多余的slot中内存资源就浪费了。

  • 整个作业的pipelink可能由于资源过大无法无法放到一个slot或者TM中。再比如GPU资源保障计算效率,如果没有这么多GPU那么久无法申请到资源,久没办法执行

粗粒度优化成细粒度

在这里插入图片描述

  • 以上,将算子按照并发度分成4个SSG,保证每个SSG内部并发是对齐的,但是由于每个slot只有一种默认规格,依然需要将该Slot的所有资源为度都对齐到对应SSG的最大值,比如内存需要和Redis维表的需求对齐,managed momory需要和聚合算子对齐,甚至扩展资源中都需要加入一块GPU,这依然不能解决资源浪费问题
  • 为了解决以上问题,再次优化细粒度资源管理,让每一个Slot的资源规格都可以单独设置,用户安需申请,最大化资源利用率,细粒度资源管理就是通过作业让每个模块安需申请和使用资源来提高资源整理利用率
细粒度资源适用场景
  • 作业中上下游task并发有明显的差异
  • 整个任务pipeline需要的资源太多,无法放入单个Slot/TaskManager中
  • 批作业,不同Stage消耗资源有明显的差异。
  • 以上几个,都需要拆分多个SSG,不同SSG资源存在差异,这时候,通过细粒度资源管理久能减少资源浪费了。
细粒度资源原理
  • Flink架构,TaskManager会划分多个Slot资源,Slot是Flink运行时候进行资源考度和分配的基本单元
  • Flink 高版本1.1.4之后,用户可以指定配置Slot资源,完成配置后,Flink根据用户资源配置从TaskManager中动态剪切一个完全匹配的Slot,如下图,需要一个具有0.25Core 和1GB内存的Slot,Flink为分配Slot1

在这里插入图片描述

  • 如果我设置TaskManager的时候不知道具体的Slot分配资源,他会安默认情况配置自动决定资源配置,默认情况TaskManager总资源和TaskManager.numberOfTaskSlots计算的,就和粗粒度一样了。
  • 以下是一个完整的细粒度配置,TaskManger分配Slot1,Slot2,TaskManager中甚于的可用内存为0.25Core 和1G内存,这些空闲资源可以进一步划分,以满足他资源需求。

在这里插入图片描述

资源分配策略-动态资源切割机制
  • Flink对每一个SSG进行资源分配采用的都是动态资源切割机制,以下案例分析:

在这里插入图片描述

  • 如上图:TaskManager在切割的时候,

    • 首先Taskmanager适用全部资源启动,但是没有预定义的Slot,
    • 当有一个具有0.25Core的1GB内存的请求到达时,Flink将选择一个具有足够空闲资源的TaskManager来完成Slot请求,
    • 当没有足够可用资源的TaskManager的时候,Flink会Native Kubernetes或者YARN上时尝试分配新的TaskManager
  • 预定义配置方式会有如下问题:

    • 集群中可能存在资源碎片:因为我们是自定义,如果有两Slot请求,每个Slot具有3G堆内存,但是TaskManager总内存是4G,那么Flink将会启动两个TaskManger,每个TaskManager中会有1G内存浪费,(这种情况Flink还解决不了,以后可能会优化。)
    • 请确保为Slot共享自建配置的资源数量不超过TaskManager的资源总量。否则FlinkJob将异常失败。
  • 通过以上案例,再来细分一下资源:

在这里插入图片描述

  • 在集群中,进行资源分配:
    • SSG1 中并发最大,CPU要求高,那么给2Core。1G
    • SSG2 内存要求高,那么给。1Core。4G
    • SSG3中Manager memory 要进行State的存储,内存要求高,那么给 1Core 8G
    • SSG4 中要求图形计算,那么给GPU,那么资源给。 1Core,1G,1GPU
Flink细粒度资源管理局限性
  • 是一项新的实验性功能
  • 不支持评价分配Slot策略:这个策略让所有可能的Taskmanager上平均分配Slot,
  • 与Flink的WebUI集成有限:细粒度资源管理中的Slot可以具有不同资源规格,webUI目前不限制Slot详细信息
  • 与批处理作业有限集成:目前,细粒度资源管理要求在所有边缘类型都被阻塞Blocking的情况下处理工作负载,为此,需要配置fine-grained.shuffle-mode.all-blocking = true,会影响性能。详见FLINK-20865。
  • 不建议配置混合资源:不建议仅仅为作业的某些部分指定资源需求,而未制指定其余部分的资源需求,目前任何资源的Slot都可以满足未指定的需求,他获取的时机资源可能在不同的作业执行或故障切换中不一致
  • Slot分配结果可能不是最优的:由于Slot需求包含多个维度的资源,默认的资源分配策略可能无法实现最优的Slot分配,某些场景下可能会导致资源分片资源分配失败

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

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

相关文章

打卡学习Python爬虫第二天|Web请求过程刨析

一、服务器渲染 服务器端渲染(Server-Side Rendering,简称SSR)是一种网页渲染技术。在这种技术中,服务器在接收到客户端的请求后,会生成页面的初始HTML内容,并将其发送给客户端。客户端浏览器接收到这些HT…

什么是BKP(备份寄存器)

一,什么是BKP 备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域里,当VDD电源被切断,他们仍然由VBAT维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也…

数据结构(6.2_2)——领接表法

领接表法(顺序存储链式存储) 代码: #define MaxVertextNum 10 //边(弧) typedef struct ArcNode {int adjvex;//边/弧指向哪个结点struct ArcNode* next;//指向下一条弧的指针//InfoType info;//边权值 }ArcNode; //顶点 typedef struct VNo…

小阿轩yx-Docker Swarm 管理

小阿轩yx-Docker Swarm 管理 容器编排部署工具 除 Google 推出的 Kubernetes 之外,还有 Docker 发布的 Swarm 与 Mesos 推出的 Marathon 案例一 Docker Swarm 群集部署 Docker 自诞生以来,容器特性以及镜像特性给 DevOps 爱好者带来很多方便很长时间…

基本数据统计分析上|集中位置统计量|分散程度统计量|分布形状统计量|常见概率分布

数据统计分析 现实生活中的许多数据都是随机产生的,如考试分数,月降雨量,灯泡寿命等。从统计角度来看,这些数据其实都是符合某种分布的,这种分布就是统计规律性 在数学建模过程中经常与数据打交道,需要进行…

【鸟哥的Linux私房菜(七)之文件IO】

文章目录 C语言文件IOC语言文件接口汇总什么是当前路径?默认打开的三个流 系统文件I/Oopenopen的第一个参数open的第二个参数open的第三个参数open的返回值 closewriteread 文件描述符fd文件描述符的分配规则重定向重定向的原理dup2添加重定向功能到minishell FILEF…

微乐校园pf

TOC springboot451微乐校园pf 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这…

vue3中引入插件报ts报错Could not find a declaration file for module

引入第三方组件时,下载了组件还是报ts错误Could not find a declaration file for module 解决办法 1. 下载这个插件的ts库(有的没有ts库就用下面这种方式) 2. 在src下创建一个shims-vue.d.ts文件(简单直接,我用的这种…

DNS域名解析服务理论详解(域名结构、递归查询和迭代查询、CDN)

文章目录 DNS域名解析服务1.DNS系统的概念2.DNS系统的主要作用3.DNS的分布式数据结构和域名的结构4.DNS服务器类型4.1三种类型4.2分布式数据库4.3名词解释 5.CDN技术5.1CDN的基本原理5.2CDN的主要功能 6.DNS查询类型及原理6.1查询方式6.2查询原理过程6.3本地主机的DNS映射文件 …

基于Hadoop的物品租赁系统的设计与实现 9349a--论文

TOC springboot344基于Hadoop的物品租赁系统的设计与实现 9349a--论文 绪 论 1.1开发背景 随着网络的飞速发展,网络技术的应用越来越广泛,而信息技术的飞速发展,计算机管理系统的优势也逐渐体现出来,大量的计算机电子信息已经…

Python | 数据处理中常用的数据分布介绍

数据分布是指数据在统计图中的形状和特征,即数据取值的统计规律。在统计学中,数据分布是描述数据集中数值分布情况和规律的重要工具。通过数据分布,可以了解数据的集中程度、分散程度、偏态和峰态等信息,进而对数据进行合理的分析…

95后医疗行业女性转型记:如何成功踏入人工智能项目管理领域

分享目录 一、自我介绍,给大家分享一下拿到offer的心情吧 二、在整个求职转型陪跑营里,你收获最大的三个点是什么? 三、求职转行过程中,你遇到了哪些困难?七芊老师和强哥是怎么帮助你的?你是怎么走过来的…

Bellman_ford算法

使用Dijikstra算法求最短路问题,要求图中不能存在负长度的边,也就是负权边 为什么Dijikstra算法不能用来求含有负权边的图中的最短路问题? Bellman_ford算法 mention(1): 没有挑选路径长度距离编号 1 结…

[Datawhale AI夏令营 2024 第四期] 从零入门大模型微调之旅的总结

0. 引言: 在人工智能飞速发展的今天,掌握大模型微调技能对于从事 AI 研究和开发的专业人士来说至关重要。因此,Datawhale AI夏令营 2024 第四期] 从零入门大模型微调之旅;顺便参加了星火大模型驱动阅读理解题库构建挑战赛。 1. …

XSS--DOM破坏案例与靶场

靶场连接https://xss.pwnfunction.com/challenges/ 目录 Ma SPaghet! Jeff Ugandan Knuckles Ricardo Milos Ah Thats Hawt Ligma Mafia Ok,Boomer Ma SPaghet! <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHT…

【嵌入式开发 Linux 常用命令系列 4.5 -- 去除 git diff 时出现的 ^M】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 去除 git diff 时出现的 ^Mgit config --global core.whitespace cr-at-eol选项解释 为什么使用 cr-at-eol如何配置使用示例纠正行尾回车符Sumamry 去除 git diff 时出现的 ^M git config --global core.whitespace cr-at-eol …

day23 Java基础——数组详解

day23 Java基础——数组(array) 文章目录 day23 Java基础——数组(array)1. 数组的概述2. 数组的声明和创建2.1 声明数组2.2 创建数组2.3 内存分析2.4 数组的三种初始化静态初始化动态初始化数组的默认初始化 3. 数组的使用3.1 访问数组元素3.2 数组的遍历3.3 数组的复制3.4 数…

微服务通过nacos实现动态路由

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…

08结构型设计模式——适配器模式

一、适配器模式简介 适配器模式&#xff08;Adapter Pattern&#xff09;是结构型设计模式之一&#xff0c;用于将一个类的接口转换成客户希望的另一个接口。这个模式使得原本接口不兼容的类可以在一起工作。适配器模式的核心目的是实现接口兼容性&#xff0c;使得系统能够使用…

C/C++软件逆向:IDA基本使用

这篇文章主要来说一下IDA的基本使用&#xff0c;那么在此之前先来准备一个简单的程序&#xff0c;作为IDA使用的实例。VS 创建一个C项目&#xff0c;并设置项目属性&#xff1a;设置运行库为MTd&#xff08;默认是MDd&#xff09; 运行库选项区别&#xff1a; 在Visual Studio…