当前位置: 首页 > news >正文

Flink 内存模型

在大数据中所有开源计算框架都会使用到JVM ,例如:MapReduce、Storm、Spark等,这些计算框架在处理数据过程中涉及到将大量数据存储在内存中,此时如果内存管理过渡依赖JVM,就会出现java对象存储密度低导致内存使用率低以及垃圾回收导致系统不稳定问题,这极大影响了系统的性能和稳定性。Flink也是计算框架,计算过程中同样也是基于JVM,但是Flink实现了内存管理,即脱离JVM对内存进行管理,统一且有效地管理堆内存和堆外内存,确保大规模数据处理不会因为GC等问题造成系统不稳定。

Flink1.10版本后为了满足更细粒度以及灵活的内存管理,升级了内存模型,对内存组成进行了比较大的调整,由于在Flink中计算主要存在于TaskManager节点,这里说的Flink内存模型也就是TaskManager的内存模型,JobManager的内存模型与TaskManager的内存模型类似。

上图是Flink内存模型,从图中可以看出Flink 进程总内存(Total Process Memory)包含了Flink总内存(Total Flink Memory)和JVM特定内存。Flink总内存又包括JVM堆内存(JVM Heap)、托管内存(Managed Memory) 、直接内存(Direct Memory)。下面分别介绍各个部分内存功能以及参数配置。

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)

非堆内存也可以叫做堆外内存,更准确来说是大部分的堆外内存,包含了托管内存(Managed Memory)、直接内存(Direct Memory)两部分。

Flink非堆内存(Off-Heap Memory)

直接内存(Direct Memory)

直接内存(Direct Memory)分为Framework非堆内存(Framework Off-Heap)、Task 非堆内存(Task Off-Heap)和Network三个部分。直接内存主要作用是减少GC压力、提升性能效率。

Framework非堆内存(Framework Off-Heap)
Framework 非堆内存即taskexecutor的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总内存taskmanager.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.jsqmd.com/news/925262/

相关文章:

  • Jsxer:Adobe脚本逆向神器,轻松破解JSXBIN二进制格式
  • 泰卢固语语音转文本延迟高达2.8秒?Gemini边缘部署优化方案(附印度电信部认证基准测试报告)
  • League Akari:英雄联盟玩家的终极自动化工具包完全指南
  • 5分钟上手KS-Downloader:免费获取快手无水印视频的完整教程
  • 基于Arduino的物理专注力计时器:从硬件约束到心流状态
  • 龙虾安装步骤
  • 今天不配置Gemini社媒工作流,明天你的KOC合作成本将上涨210%
  • 5.31 沈阳黄金回收实测 靠谱商家对比与变现指南 - 速递信息
  • 分布式训练(二): DeepSpeed 知识总结
  • 郑州市 经开区 上门安装、维修维保|维小达 开关插座/灯具/门窗/柜体/锁具/卫浴/龙头/洗菜盆/踢脚线一站式家装安装服务 - 维小达科技
  • 5.31 芜湖黄金回收|皖江枢纽实测 避坑 + 正规榜单 - 速递信息
  • Gemini社交媒体运营全链路拆解(2024最新算法适配版)
  • 123云盘免费会员解锁终极指南:3步告别下载限制的完整解决方案
  • CentOS 7.6最小化安装后,必装的5个基础软件包清单(附yum命令详解)
  • WuWa-Mod核心技术解析:AES加密解密与游戏模组实战指南
  • 从群接单到平台化运营:游戏电竞护航陪玩源码系统小程序 - 壹软科技
  • 基于Arduino Leonardo的自制头控游戏控制器:硬件设计与软件实现
  • 陕西连锁零售行业怎么做 GEO 优化科普:3 分钟看懂连锁零售 GEO 优化核心逻辑 - 新闻快讯
  • 如何永久保存微信聊天记录:从数据丢失焦虑到数字记忆守护
  • PVE核显直通避坑实录:AMD 5600G直通后Win10休眠唤醒失败怎么办?
  • 郑州市 巩义市 上门安装、维修维保|维小达 开关插座/灯具/门窗/柜体/锁具/卫浴/龙头/洗菜盆/踢脚线一站式家装安装服务 - 维小达科技
  • 5.31 太原黄金回收|本地实测盘点 教你避坑放心变现 - 速递信息
  • 人工智能从内容生成到自主进化
  • 基于PIC单片机的多参数空气质量监测系统设计与实现
  • 2026 论文降重软件实测对比:真正好用,毕业季必备宝典
  • 国内主流求职辅导公司推荐盘点:专业度与成果深度对比 - 速递信息
  • CF Spark 浏览器插件实战应用指南
  • 仿生优化群算法及应用方案【附代码】
  • 从Arduino LED闪烁入门嵌入式开发:硬件电路设计与代码优化实践
  • Windows安裝Hermers(WSL2版本)