【大数据】Flink 内存管理(三):TaskManager 内存分配(理论篇)

Flink 内存管理(三):TaskManager 内存分配

  • 1.配置 Total Memory
  • 2.配置 Heap and Managed Memory
    • 2.1 Task (Operator) Heap Memory
    • 2.2 Managed Memory
  • 3.配置 Off-Heap Memory(Direct or Native)
  • 4.详细内存模型
  • 5.Framework Memory
  • 6.Local Execution

TaskManager 在 Flink 中运行用户代码。根据需要配置内存使用量可大大减少 Flink 的资源占用并提高任务稳定性。与 JobManager 进程的内存模型相比,TaskManager 内存组件具有类似但更复杂的结构。

1.配置 Total Memory

Flink JVM 进程的总内存(Total Process Memory)由 Flink 应用程序(Total Flink Memory,Flink 总内存)和 JVM 运行进程所消耗的内存组成。Flink 总内存( Total Flink Memory)包括 JVM HeapManaged Memory(托管内存,由 Flink 管理)和其他 Direct Memory(或 Native Memory)的使用量。
在这里插入图片描述

  • 如果您在本地运行 Flink(例如从集成开发环境运行)而不创建集群,那么只有内存配置选项的一个子集与之相关,请参阅 “本地内存配置”。
  • 否则,为 TaskManager 设置内存的最简单方法就是 配置总内存。这里 将详细介绍一种更精细的方法。
  • 其余内存组件将根据默认值或附加配置选项自动调整。有关其他内存组件的更多详情,请参阅后续章节。

2.配置 Heap and Managed Memory

正如之前在总内存描述中提到的,在 Flink 中设置内存的另一种方法是明确指定 Task Heap MemoryManaged Memory。这样,Flink 的任务和托管内存就能更好地控制可用的 JVM 堆。

其余的内存组件将自动调整。

如果已明确配置了任务 Task Heap MemoryManaged Memory,建议既不要设置进程总内存(Total Process Memory),也不要设置 Flink 总内存(Total Flink Memory)。否则,很容易导致内存配置冲突。

2.1 Task (Operator) Heap Memory

如果要保证用户代码有一定量的 JVM 堆可用,可以显式设置 Task Heap Memorytaskmanager.memory.task.heap.size)。它将被添加到 JVM 堆大小中,并专门用于运行用户代码的 Flink Operator。

2.2 Managed Memory

托管内存由 Flink 管理,并作为本地内存(堆外)分配。以下工作负载使用托管内存:

  • 流式工作可将其用于 RocksDB 状态后端。
  • 流式和批处理作业都可以用它来进行排序、哈希表、缓存中间结果。
  • 流式和批处理作业都可以用它来执行 Python 进程中的用户自定义函数。

托管内存的大小可以:

  • 可通过 taskmanager.memory.managed.size 进行显式配置。
  • 或通过 taskmanager.memory.managed.fraction 计算为 Flink 总内存(Total Flink Memory)的一部分。

如果同时设置了大小和比例,则大小优先于比例。如果既没有明确配置大小,也没有配置比例,则将使用默认比例。

如果作业包含多种类型的托管内存消费者,还可以控制托管内存在这些类型之间的共享方式。配置选项 taskmanager.memory.managed.consumer-weights 允许你为每种类型设置一个权重,Flink 将根据该权重按比例预留托管内存。有效的消费者类型有:

  • OPERATOR:用于内置算法。
  • TATE_BACKEND:用于流式传输中的 RocksDB 状态后端。
  • PYTHON:用于 Python 进程。

例如,如果一个流作业同时使用了 RocksDB 状态后端和 Python UDF,且消费者权重配置为 STATE_BACKEND:70,PYTHON:30,那么 Flink 将为该作业预留 70 % 70\% 70% 的内存。

对于每种类型,只有当作业包含该类型的托管内存消费者时,Flink 才会为其保留托管内存。例如,如果流作业使用堆状态后端和 Python UDF,且消费者权重配置为 STATE_BACKEND:70,PYTHON:30,Flink 将为 Python 进程使用所有托管内存,因为堆状态后端不使用托管内存。

🚀 Flink 不会为消费者权重中未包含的消费者类型预留托管内存。如果作业确实需要缺少的类型,就会导致内存分配失败。默认情况下,所有消费者类型都包含在内。只有在显式配置 / 改写权重时才会发生这种情况。

3.配置 Off-Heap Memory(Direct or Native)

  • 用户代码分配的堆外内存应计入任务堆外内存(taskmanager.memory.task.off-heap.size)。
  • 你也可以调整框架的堆外内存(Framework Off-Heap Memory)。只有在确定 Flink 框架需要更多内存时,才可更改该值。
  • Flink 将框架堆外内存(Framework Off-Heap Memory)和任务堆外内存(Task Off-Heap Memory)纳入 JVM 的直接内存(Direct Memory)限制。
  • 虽然本地非直接内存(Native Non-Direct Memory)的使用可以作为框架堆外内存或任务堆外内存的一部分,但在这种情况下会导致更高的 JVM 直接内存限制。
  • 网络内存(Network Memory)也是 JVM 直接内存的一部分,但它由 Flink 管理,并保证永远不会超过其配置大小。因此,调整网络内存大小对这种情况没有帮助。

4.详细内存模型

在这里插入图片描述
下表列出了上面描述的所有内存组件,并引用了影响各组件大小的 Flink 配置选项:

组件
配置选项
描述
Framework Heap Memorytaskmanager.memory.framework.heap.size(默认 128 M 128M 128M专用于运行 Flink 框架,通常不用修改该值,它可能与特定的部署环境或作业结构有关,例如高并行度
Task Heap Memorytaskmanager.memory.task.heap.size专用于用户提交作业划分的 Tasks
Managed Memorytaskmanager.memory.managed.size taskmanager.memory.managed.fraction(默认 0.4 0.4 0.4这是一块被 Flink 管理的堆外内存,属于 Native Memory,用于批处理作业的排序,Hash 运算,缓存中间结果,以及 RocksDB 状态后端的元数据
Framework Off-Heap Memorytaskmanager.memory.framework.off-heap.size(默认 128 M 128M 128M专用于运行 Flink 框架,通常不用修改该值,它可能与特定的部署环境或作业结构有关,例如高并行度
Task Off-Heap Memorytaskmanager.memory.task.off-heap.size(默认 0 B y t e 0Byte 0Byte专用于用户提交作业划分的 Tasks,不受 GC 的影响
Network Memorytaskmanager.memory.network.min (默认 64 M B 64MB 64MBtaskmanager.memory.network.max (默认 1 G B 1GB 1GBtaskmanager.memory.network.fraction(默认 0.1 0.1 0.1为 Task 之间的数据交换预留的内存,比如说网络缓冲区,默认是 Total Flink Size 的 0.1,通常不需要去调整这个值
JVM Metaspacetaskmanager.memory.jvm-metaspace.size(默认 256 M 256M 256MJM 的元空间大小,有默认值 256 M 256M 256M, 属于 Native Memory
JVM Overheadtaskmanager.memory.jvm-overhead.min 192 M B 192MB 192MBtaskmanager.memory.jvm-overhead.max 1 G B 1GB 1GBtaskmanager.memory.jvm-overhead.fraction 0.1 0.1 0.1为 Thread Stacks,Code Cache,Garbage Collection Space 预留的 Native Memory,有默认的 faction of total process size,但是必须在其 min & max 之间

正如你所看到的,某些内存组件的大小可以通过相应选项进行简单设置。其他组件则可以使用多个选项进行调整。

5.Framework Memory

在没有充分理由的情况下,不应更改框架堆内存(Framework Heap Memory)和框架堆外内存(Framework Off-Heap Memory)。只有在确定 Flink 的某些内部数据结构或操作需要更多内存时,才可以调整它们。这可能与特定的部署环境或作业结构(如高并行性)有关。此外,在某些设置中,Flink 的依赖项(如 Hadoop)可能会消耗更多的直接或本地内存。

Flink 目前既没有隔离 Framework Heap MemoryTask Heap Memory,也没有隔离 Framework Off-Heap MemoryTask Off-Heap Memory。框架内存和任务内存的分离可用于未来版本的进一步优化。

6.Local Execution

如果您在机器上以单个 Java 程序的形式本地启动 Flink,而不创建集群(例如从集成开发环境),那么除了以下组件外,所有组件都将被忽略:

内存组件
相关选项
本地执行的默认值
Task Heaptaskmanager.memory.task.heap.size无限
Task Off-Heaptaskmanager.memory.task.off-heap.size无限
Managed Memorytaskmanager.memory.managed.size 128 M B 128MB 128MB
Network Memorytaskmanager.memory.network.min
taskmanager.memory.network.max
64 M B 64MB 64MB

上面列出的所有组件均可配置为本地执行,但并非必须。如果没有配置,它们将被设置为默认值。任务堆内存(Task Heap)和任务堆外内存(Task Off-Heap)被视为无限大(Long.MAX_VALUE 字节),托管内存(Managed Memory)的默认值为 128MB,仅适用于本地执行模式。

在这种情况下,任务堆大小与实际堆大小没有任何关系。它可能与未来版本的优化有关。Flink 无法控制已启动的本地进程的实际 JVM 堆大小,这取决于您如何启动进程。如果要控制 JVM 堆大小,必须明确传递相应的 JVM 参数,例如 -Xmx-Xms

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

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

相关文章

广联达Linkworks GetAllData 信息泄露漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

!!!Python虚拟环境改名后的坑!!!!

搞了一晚上终于弄好这python虚拟环境的问题了!真的是坑啊! 本来用的纯python环境下的虚拟环境,一时心血来潮,把电脑重新装了一遍,虚拟环境的目录也改了一下,结果虚拟环境再vscode中是可以使用,…

0基础JAVA期末复习最终版

啊啊啊啊啊啊啊啊啊啊,根据网上各位大佬的复习资料,看了很多大多讲的是基础但对内容的整体把握上缺乏系统了解。但是很不幸最终挂科了,那个出题套路属实把我整神了,所以我决定痛改前非,酣畅淋漓的写下这篇文章。。。。…

故障诊断 | 一文解决,PSO-BP粒子群算法优化BP神经网络模型的故障诊断(Matlab)

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断 | 一文解决,PSO-BP粒子群算法优化BP神经网络模型的故障诊断(Matlab) 粒子群优化算法(Particle Swarm Optimization, PSO)是一种群体智能优化算法,用于求解优化问题。BP神经网络是一种用于模…

MFC由初值终值步长生成数值序列

matlab的冒号运算符可以生成数值序列; 下面来生成自己的数值序列; vc6新建一个对话框工程; 放几个控件;添加成员变量如下; void CMycolonDlg::OnButton1() {// TODO: Add your control notification handler code hereUpdateData(TRUE);double d1, d2;CString str1, …

vue 中实现音视频播放进度条(满足常见开发需求)

由于开发需要,作者封装了一个音视频播放进度条的插件,支持 vue2 及 vue3 ,有需要的朋友可联系作者,下面是对该款插件的介绍。 插件默认样式👇(插件提供了多个配置选项,可根据自身需求进行个性化…

基于Java+SSM+Jsp宿舍管理系统(源码+演示视频+包运行成功+Maven版)

您好,我是码农小波(wei158888),感谢您阅读本文,欢迎一键三连哦。 ❤️ 1. 毕业设计专栏,毕业季咱们不慌,上千款毕业设计等你来选。 目录 1、项目背景 2、项目演示 3、使用技术 4、系统设计 …

freemarker模板引擎结合node puppeteer库实现html生成图片

效果图: 先看效果图,以下是基于freemarker模板渲染数据,puppeteer加载html中的js及最后图片生成: 背景: 目前为止,后台java根据html模板或者一个网页路径生成图片,都不支持flex布局及最新的c…

buuctf_N1BOOK_粗心的小李

题目&#xff1a; 看完题目&#xff0c;git下载文件&#xff1f;然后将.git文件传到线上环境&#xff1f;&#xff08;which 会造成git泄露的安全威胁&#xff09;<这个背景抱歉我不太了解哈&#xff0c;可能后续有补充> 这里主要记录做法过程&#xff1a; 工具&#xf…

BlackberryQ10 是可以安装 Android 4.3 应用的,Web UserAgent 版本信息

BlackberryQ10 是可以安装 Android 4.3 应用的 最近淘了个 Q10 手机&#xff0c;非常稀罕它&#xff0c;拿着手感一流。这么好的东西&#xff0c;就想给它装点东西&#xff0c;但目前所有的应用都已经抛弃这个安卓版本了。 一、开发环境介绍 BlackBerry Q10 的 安卓版本是 4.…

队列基础练习(C语言实现)

目录 队列基础练习 用队列实现栈 用栈实现队列 设计循环队列 队列基础练习 用队列实现栈 题目链接&#xff1a;225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部…

高通XBL阶段读取分区

【需求】&#xff1a; 在某些场景下&#xff0c;需要在XBL阶段读取分区数据&#xff0c;需要验证xbl阶段方案 这里主要以裸分区为例&#xff0c;比如oem分区。 1、创建一个1MB大小的oem.img&#xff0c;写入内容“test oem partition” 创建方式&#xff1a; dd if/dev/null …

图片Base64编码解码的优缺点及应用场景分析

title: 图片Base64编码解码的优缺点及应用场景分析 date: 2024/2/24 14:24:37 updated: 2024/2/24 14:24:37 tags: 图片Base64编码解码HTTP请求优化网页性能加载速度安全性缓存机制 随着互联网的迅猛发展&#xff0c;图片在网页和移动应用中的使用越来越广泛。而图片的传输和加…

python-mysql协程并发常用操作封装

目录 前言封装代码测试代码参考 前言 协程异步操作MYSQL是常用的&#xff0c;博主这里在GitHub上找了两个包&#xff0c;databases和aiomysql&#xff0c;第一个包除了mysql外还支持其他的数据库&#xff0c;且操作MYSQL时底层也是使用的aiomysql&#xff0c;但文档内容比较少…

Linux使用C语言获取进程信息

Linux使用C语言获取进程信息 Author: OnceDay Date: 2024年2月22日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可查看专栏: Linux实践记录_Once_day的博客-CSDN博客 参考文档: Linux proc目录详解_/proc/mounts-CSDN博客Linux下/proc目录介绍 - 知乎 (zhihu.com)Linux内…

深入探究Python多进程编程:Multiprocessing模块基础与实战【第98篇—Multiprocessing模块】

深入探究Python多进程编程&#xff1a;Multiprocessing模块基础与实战 在Python编程中&#xff0c;多进程处理是一项关键的技术&#xff0c;特别是在需要处理大规模数据或执行耗时任务时。为了充分利用多核处理器的优势&#xff0c;Python提供了multiprocessing模块&#xff0…

Ubuntu20.04和Windows11下配置StarCraft II环境

1.Ubuntu20.04 根据下面这篇博客就可以顺利安装&#xff1a; 强化学习实战(九) Linux下配置星际争霸Ⅱ环境https://blog.csdn.net/weixin_39059031/article/details/117247635?spm1001.2014.3001.5506 Ubuntu下显示游戏界面目前还没有解决掉。 大家可以根据以下链接看看能…

高速DRAM的training

随着每一代接口(Interface)和存储(memory)的频率和速率的提高&#xff0c;信号采样以及传输变得越来越困难&#xff0c;因为数据眼(data eyes)越来越小。 为了帮助高速 I/O 握手&#xff0c;接口和存储支持越来越多的Training Modes&#xff0c;系统设计人员必须将这些Trainin…

联想开天昭阳N4620Z笔记本如何恢复出厂麒麟操作系统(图解)

联想开天昭阳N4620Z笔记本简单参数&#xff1a; 中央处理器&#xff1a;KX-6640MA G2 内存&#xff1a;8GB 固态硬盘&#xff1a;512GB SSD 显示器&#xff1a;14.0”FHD 电池&#xff1a;4Cell 操作系统&#xff1a;麒麟KOS中文RTM&#xff08;试用版&#xff09; 此款笔…

黑马JavaWeb开发跟学(一)Web前端开发HTML、CSS基础

黑马JavaWeb开发一.Web前端开发HTML、CSS基础 引子、Web开发介绍传统路线本课程全新路线本课程适用人群课程收获一、什么是web开发二、网站的工作流程三、网站的开发模式四、网站的开发技术 前端开发基础一、前端开发二、HTML & CSS2.1 HTML快速入门2.1.1 操作第一步第二步…