Apache Flink内存模型

news2024/11/15 21:33:03
Flink 内存模型
  • 大数据中所有开源的框架都会使用到JVM,不如,MapReduce,Storm,Spark等,这些计算框架处理数据过程中涉及到将大量数据存储到内存中,此时如果内存管理过渡依赖JVM,会出现java对象存储密度低导致内存使用率低以及垃圾回收导致的系统不稳定问题,这极大影响了系统的性能和稳定性。
  • Flink也是计算框架,计算过程中同样也是基于JVM,但是Flink实现了内存管理,即脱离JVM堆内存进行管理,统一且有效的管理堆内存和堆外内存,确保大规模数据处理不会因为GC等问题造成系统不稳定。
Flink内存模型图解
  • Flink 1.10版本以后为了满足更细粒度以及灵活的内存管理,升级了内存模型,调整后内存模型如下图,而且Flink中计算主要存在于TaskManager节点,这里说的Flink内存模型也就是TaskManager的内存模型,JobManager的内存模型与TaskManager的内存模型类似
    在这里插入图片描述

  • 如上图,Flink总内存(Total Process Memory)包含了Flink总内存(Total Flink Memory) 和JVM特定内存,Flink总内存又包括JVM堆内存(JVM Heap),托管内存(Managed Momory),直接内存(Direct Memory),下面我们分别介绍每一部分的功能以及Flink提供的参数配置

Flink 总内存(Total Flink Memory)
  • TaskManager 进程占用的所有与Flink相关的内存,不包括JVM特定内存部分,包含6个部分内存(Framework堆内存, Task堆内存,托管内存,Framework非堆内存,Task非堆内存, Network),关于Flink Framework 和Flink Task 使用的内存 既有堆内内存也有堆外内存,托管内存和Network使用的仅仅是堆外内存。
  • Flink 总内存配置参数根据不同的部署场景不同:taskmanager.memory.flink.size 或者 taskmanager.memory.process.size(容器部署指定参数),无默认值,需要用户指定。
Flink 堆内存(JVM Heap)
  • Flink 堆内存就是JVM堆内存(JVM Heap),分为Framework堆内存(Framework Heap)和Task堆内存(Task Heap),其中Framework主要用于Flink 框架本身需要的内存空间,Task 堆内存则用于Flink算子用户代码的执行,也被称为TaskExecutor使用的内存,两者主要区别用于是否将内存计入Slot计算资源中,Framework 内存不会将内存分配给Slot使用,Task 堆内存会分配给Slot。
Framework 堆内存(Framework Heap)
  • Framework堆内存配置参数为:taskmanager.memory.framework.heap.size,该值默认为 128M。
Task 堆内存(Task Heap)
  • Task堆内存配置参数为:taskmanager.memory.task.heap.size,该值没有默认值,如果没有指定会自动用Flink总内存 减去 Framework堆内存(Framework Heap),减去托管内存(Managed Memory),减去Framework 非堆内存(Framework Off-Heap),减去Task非堆内存(Task Off-Heap),减去 NetWork,剩下的内存就是Task堆内存。
Flink 非堆内存(Off-Heap Memory)
  • 非堆内存也可以叫做堆外内存,更准去来说是大部分的堆外内存,包含了托管内存(Managed Memory),直接内存(Direct Memory)两部分
托管内存(Menaged Memory)
  • 托管内存是Flink 负责分配和管理的本地堆外内存,在流处理作业中用于RocksDBstateBackend状态存储后段,在批处理作业中用于排序,哈希表,缓存中间结果。
  • 托管内存(Menaged Memory)配置参数油如下两个:
    • taskmanager.memory.managed.fraction,默认值0.4,如果未显式指定托管内存大小,则使用 总Flink内存的百分比作为托管内存。
    • taskmanager.memory.managed.size,无默认值,一般也不指定,而是按照比例来推定,更加灵活。
直接内存(Direct Memory)
  • 直接内存 分为 Framework 非堆内存(Framework Off-Heap),Task 非堆内存(Task Off-Heap) 和Network 三部分,直接内存主要作用是减少GC压力,提升性能效率。
    • Framework 非堆内存(Framework Off-Heap)
  • Framework 非堆内存即waskexxecutor的Framework堆外内存大小,不会分配给slot,配置参数为:taskmanager.memory.framework.off-heap.size,默认值128M。
    • Task 非堆内存(Task Off-Heap)
  • Task 非堆内存,配置参数taskmanager.memory.task.off-heap.size,默认值为0,即不使用。
    • Network
  • Network内存存储空间主要用于 给予Netty进行网络数据交换数据传输的本地缓存,例如:TaskManager之间Shuffle,广播,与外部组件的数据传输。Network的配置相关参数有3个,分别如下:
    • taskmanager.memory.network.min:网络缓存的最小值,默认64MB;
    • taskmanager.memory.network.max:网络缓存的最大值,默认1GB;
    • taskmanager.memory.network.fraction: 网络混存占flink总内存manager.memory.flink.size的比例,默认值0.1,如果根据比例算出的内存量比最小值小或者比最大值大,就会限制到最小值或者最大值。
JVM特定内存
  • JVM特定内存是JVM堆外内存的另一小部分内存,其不再Flink总内存范围之内,包括jvm元空间(JVM Metaspace) 和JVm Overhead两部分,其中JVM元空间存储JVM加载类的元数据,加载的类越多,需要的内存空间越大,JVM Overhead 则主要用于其他JVM开销,例如代码缓存,线程栈等。

  • Flink 中将内存分成不同的区域,实现了更加精准的内存控制,在使用Flink过程中一般指定Flink总内存(Total Flink Memory,taskmanager.memory.flink.size)即可,其他额外指定JVM内存参数不需额外指定,如果需要根据Flink程序做一些调整建议有限调整fraction 比例参数,例如:网络缓存占比taskmanager.memory.network.fraction(根据网络流量大小调节)与托管内存占比

  • taskmanager.memory.managed.fraction(根据RocksDB状态大小调节),这样做可以间接影响任务内存的配额,需要特别注意的是如果手动指定较多的固定参数哼可能出现内存配额冲突导致的Flink程序部署失败。

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

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

相关文章

国产GD32单片机开发入门(二)GD32单片机详解

文章目录 一.概要二.单片机型号命名规则三.GD32F103系统架构四.GD32F103C8T6单片机启动流程五.GD32F103C8T6单片机主要外设资源六.单片机开发过程中查看芯片数据手册的必要性1.单片机外设资源情况2.GD32单片机内部框图3.GD32单片机管脚图4.GD32单片机每个管脚功能5.单片机功耗数…

Mybatis--其他查询操作和数据库连接池(下下)

序 准备工作: mysql数据库和表的信息更新: DROP TABLE IF EXISTS articleinfo;CREATE TABLE articleinfo (id INT PRIMARY KEY auto_increment,title VARCHAR ( 100 ) NOT NULL,content TEXT NOT NULL,uid INT NOT NULL,delete_flag TINYINT ( 4 ) DEF…

24 messagebox 组件

messagebox 组件使用指南 Tkinter messagebox 组件用于创建弹出式消息框,以显示信息、警告、错误或询问用户问题。它提供了一种简单的方法来向用户展示消息,并等待用户响应。以下是对 messagebox 组件的详细说明和一个使用案例。 messagebox 组件方法 …

数学基础(十)

一、层次聚类 层次聚类是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚类的根节点。 常见聚类树有自下而上合并和自上而下分裂两种方法 …

【计算机网络】mini HTTP服务器框架与代码

注注注:本篇博文都是代码实现细节,但不会进行演示,演示看孪生篇 另外,由于tcp套接字部分本质都是套路,所以就不再进行赘述。 目录 1 请求反序列化2 读取url文件内容3 构建响应 1 请求反序列化 我们肯定会先收到请求&…

VIVO社招入职SHL测评题库题型分析:动机问卷、性格问卷、归纳推理、数字推理、语言推理

VIVO社招入职SHL测评数字推理考什么?例题分析 VIVO社招入职SHL测评归纳推理考什么?例题分析

资产架构端口应用CDNWAF站库分离负载均衡

知识点: 1、资产架构-端口&目录&插件接口&多站点&多应用 2、番外安全-域名&服务器本身&服务厂商&管理人员 3、考虑阻碍-站库分离&CDN&WAF&负载均衡&主机防护 详细点: 1、前置条件-购买使用-云服务器&a…

【AI编程秘籍】Q-learning原理大揭秘!让AI学会自己做决策!

🌟【AI编程秘籍】Q-learning原理大揭秘!让AI学会自己做决策!🚀 Hey小伙伴们,今天要给大家带来的是一个非常酷炫的项目——深入浅出Q-learning原理!无论你是编程新手还是AI老司机,都能从中收获满…

进阶-7.管理工具

管理工具 1.系统数据库2常用工具2.1 mysql2.2 mysqladmin2.3 mysqlbinlog2.4 mysqlshow2.5 mysqldump2.6mysqlimport /source 1.系统数据库 2常用工具 2.1 mysql C:\Users\Tracy>mysql -uroot -p123456 test -e "select * from student"; -------------------- |…

【小沐学Rust】Rust实现TCP网络通信

文章目录 1、简介2、安装2.1 安装Rust2.2 VsCode安装Rust插件 3、快速入门3.1 命令行构建3.2 Cargo构建3.3 Cargo添加依赖 4、基本语法4.1 main 的函数4.2 代码缩进4.3 todo! 宏4.4 println! 宏4.5 变量的使用4.6 元组4.7 结构4.8 枚举4.9 函数 5、TCP通信5.1 测试一5.1.1 TCP服…

【HTML】模拟二级菜单【附源代码】

模拟二级菜单 HTML部分&#xff1a; <!DOCTYPE html>: 声明文档类型为HTML5。<html>: HTML文档的根元素。<head>: 包含文档的元数据&#xff0c;如字符集、标题和样式。 <meta charset"utf-8">: 设置文档的字符编码为UTF-8。<title>:…

企业级web应用服务器之Tomcat

Tomcat介绍 Tomcat 由 Apache 软件基金会下属的 Jakarta 项目开发。它实现了 Java Servlet 和 JavaServer Pages&#xff08;JSP&#xff09;等 Java EE 技术规范&#xff0c;为基于 Java 的 Web 应用程序提供运行环境。 主要特点 轻量级 Tomcat 是一个相对轻量级的服务器&am…

浏览器解析流程

思考 不知道大家是否思考过这几个问题&#xff1a; 当我们在浏览器中输入url后&#xff0c;到底发生了什么&#xff1f; h5&#xff0c;css&#xff0c;js代码执行的顺序是什么&#xff1f;什么情况下会阻塞页面&#xff1f;又有什么办法可以提高页面响应速度呢&#xff1f; 如…

再说圆的面积

在微积分-圆的面积和周长(1)介绍微积分方法求解圆的面积&#xff0c;本文使用蒙特卡洛方法求解圆面积。 取&#xff08;0&#xff0c;1&#xff09;* (0,1)区间&#xff0c;也就是单位圆第一象限的端点区间对应的正方形区间。下面是计算机给出的结果&#xff1a;很显然第一象限…

基于vue3和audio封装的简易音频播放器

样式如图所示 <template><div class"audio-player"><div class"player_top" flex-ac flex-justify-between ><div class"fileName genericTitle" fs-28 l-height-32 height-64 pr-42 flex-ac><span class"t…

UE管理内容 —— FBX Morph Target Pipeline

目录 Naming Setting Up Morph Targets Importing Morph Targets Morph Target 是特定网格体的顶点位置的快照&#xff0c;该网格体在某种程度上已经变形&#xff1b;例如&#xff0c;可以使用一个角色模型&#xff0c;对其面部进行重塑以创建一个面部表情&#xff0c;然后将…

Linux 流式DMA映射(DMA Streaming Mapping)

流式DMA相关的接口为dma_map_sg(),dma_unmap_sg(),dma_map_single(),dma_unmap_single()。流式DMA一般用于已经分配好的内存&#xff0c;然后再对其进行DMA操作&#xff0c;而不是提前申请好一块cache一致性的内存给DMA用。例如从协议栈里发下来的一个包&#xff0c;想通过网卡…

day41| 01背包问题一 01背包问题二(滚动数组篇)416. 分割等和子集 1049.最后一块石头的重量II 494. 目标和 474. 一和零

文章目录 背景介绍01背包问题一思路方法一方法二01背包问题二(滚动数组篇)思路方法一方法二416. 分割等和子集思路方法一1049.最后一块石头的重量II思路方法一494. 目标和思路方法方法二 回溯法474. 一和零思路方法总结由于笔试的时候会判重,而这里面的代码都是我自己写的,…

不同场景下的负载均衡器

负载均衡主要用于分配来自互联网或局域网的请求或任务负载到多个服务器中。 这样做可以避免任何单个服务器的过载&#xff0c;提高响应速度&#xff0c;增加系统的整体处理能力&#xff0c;并确保系统的高可用性和可靠性。 负载均衡器大概可以分为 3 类&#xff0c;包括&#…

Argo/BGC-Argo数据下载

BGC-Argo官方网站 网址&#xff1a; https://biogeochemical-argo.org/data-access.php 信息&#xff1a;提供BGC-Argo位置及剖面预览 数据ftp下载&#xff1a;ftp://ftp.ifremer.fr/ifremer/argo 或者 ftp://usgodae.org/pub/outgoing/argo 问题&#xff1a;dac文件按照数据中…