【大数据】Flink 内存管理(一):设置 Flink 进程内存

news/发布时间2024/5/14 9:39:09

Flink 内存管理》系列(已完结),共包含以下 4 篇文章:

  • Flink 内存管理(一):设置 Flink 进程内存
  • Flink 内存管理(二):JobManager 内存分配(含实际计算案例)
  • Flink 内存管理(三):TaskManager 内存分配(理论篇)
  • Flink 内存管理(四):TaskManager 内存分配(实战篇)

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

Flink 内存管理(一):设置 Flink 进程内存

  • 1.配置 Total Memory
  • 2.JVM 参数
  • 3.根据比例限制的组件(Capped Fractionated Components)

Apache Flink 通过严格控制各种组件的内存使用,在 JVM 上提供高效的工作负载。虽然社区努力为所有配置提供合理的默认值,但用户在 Flink 上部署的应用程序种类繁多,这意味着这并非总是可行。为了向用户提供最大的生产价值,Flink 允许对集群内的内存分配进行高级和精细调整。

1.配置 Total Memory

Flink JVM 进程的总内存Flink 应用程序消耗的内存Total Flink Memory)和 JVM 进程消耗的内存 组成。

在这里插入图片描述
在 Flink 中设置内存的最简单方法是配置以下两个选项之一:

组件Option for TaskManagerOption for JobManager
Total Flink memorytaskmanager.memory.flink.sizejobmanager.memory.flink.size
Total process memorytaskmanager.memory.process.sizejobmanager.memory.process.size
  • 其余内存组件将根据默认值或附加配置选项自动调整。
  • 配置 Flink 总内存(Total Flink Memory)更适合独立部署,因为在这种情况下,您需要声明给 Flink 本身分配多少内存。Flink 总内存分为 JVM 堆内存JVM Heap)和 堆外内存Off-heap Memory)。
  • 如果配置总进程内存(Total Process Memory),则表示应为 Flink JVM 进程分配多少内存。对于容器化部署,它对应于所请求容器的大小。

另一种设置内存的方法是配置总 Flink 内存所需的内部组件,这些组件针对具体的 Flink 进程。

必须使用上述三种方法之一配置 Flink 的内存(本地执行除外),否则 Flink 启动将失败。这意味着必须明确配置以下选项子集之一,这些子集没有默认值:

for TaskManagerfor JobManager
taskmanager.memory.flink.sizejobmanager.memory.flink.size
taskmanager.memory.process.sizejobmanager.memory.process.size
taskmanager.memory.task.heap.sizetaskmanager.memory.managed.sizejobmanager.memory.heap.size

⭕ 不建议明确配置总的进程内存(Total Process Memory)和总的 Flink 内存(Total Flink Memory)。这可能会因潜在的内存配置冲突而导致部署失败。配置其他内存组件也需要谨慎,因为可能会产生更多的配置冲突。

2.JVM 参数

Flink 在启动进程时,会根据配置或导出的内存组件大小,显式添加以下与内存相关的 JVM 参数。

JVM 参数Value for TaskManagerValue for JobManager
-Xmx and -XmsFramework + Task Heap MemoryJVM Heap Memory (Ⅰ)
-XX:MaxDirectMemorySizeFramework + Task Off-heap (Ⅱ) + Network MemoryOff-heap Memory (Ⅱ),(Ⅲ)
-XX:MaxMetaspaceSizeJVM MetaspaceJVM Metaspace
  • (Ⅰ)请记住,根据所使用的 GC 算法,您可能无法使用全部堆内存。有些 GC 算法会为自己分配一定量的堆内存。这将导致堆指标返回不同的最大值。
  • (Ⅱ)请注意,用户代码中的本地非直接内存使用也可以作为堆外内存的一部分。
  • (Ⅲ)只有设置了相应的 jobmanager.memory.enable-jvm-direct-memory-limit 选项,才会为 JobManager 进程添加 JVM 直接内存限制。

3.根据比例限制的组件(Capped Fractionated Components)

本节将介绍一些选项的配置细节,这些选项可以是其他内存大小的一部分,同时受到 最小 - 最大范围 的限制,例如:

  • JVM Overhead 可以是总进程内存的一部分。
  • 网络内存(Network Memory)可以是 Flink 总内存的一部分(仅适用于 TaskManager)。

这些组件的大小必须始终介于最大值和最小值之间,否则 Flink 启动将失败。最大值和最小值都有默认值,也可以通过相关的设置来显式设置。

  • total Process memory = 1000 M B 1000MB 1000MB
  • JVM Overhead min = 64 M B 64MB 64MB
  • JVM Overhead max = 128 M B 128MB 128MB
  • JVM Overhead fraction = 0.1 0.1 0.1

那么 JVM Overhead 将是 1000 M B × 0.1 = 100 M B 1000MB\ ×\ 0.1 = 100MB 1000MB × 0.1=100MB,在 64 − 128 M B 64 - 128MB 64128MB 范围内。

请注意,如果配置相同的最大值和最小值,就会有效地将大小固定为该值。

如果没有明确配置组件内存,那么 Flink 将根据总内存使用比例来计算内存大小。计算值的上限为相应的最小/最大选项。例如,如果只设置了以下内存选项:

  • total Process memory = 1000 M B 1000MB 1000MB
  • JVM Overhead min = 128 M B 128MB 128MB
  • JVM Overhead max = 256 M B 256MB 256MB
  • JVM Overhead fraction = 0.1 0.1 0.1

那么 JVM Overhead 将为 128 M B 128MB 128MB,因为根据比例得出的大小为 100 M B 100MB 100MB,小于最小值。

如果定义了总内存及其他组件的大小,比例也可能被忽略。在这种情况下,JVM Overhead 就是总内存的其余部分。导出值仍必须在最小/最大范围内,否则配置将失败。例如,假设只设置了以下内存选项:

  • total Process memory = 1000 M B 1000MB 1000MB
  • task heap = 100 M B 100MB 100MB
  • JVM Overhead min = 64 M B 64MB 64MB
  • JVM Overhead max = 256 M B 256MB 256MB
  • JVM Overhead fraction = 0.1 0.1 0.1

进程内存总量的所有其他部分都有默认值,包括默认 Managed Memory 分数(或 JobManager 中的 Off-heap Memory)。这样,JVM Overhead 就不是比例( 1000 M B × 0.1 = 100 M B 1000MB × 0.1 = 100MB 1000MB×0.1=100MB),而是总进程内存的其余部分,要么在 64 − 256 M B 64 - 256MB 64256MB 范围内,要么失败。

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

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

相关文章

在VSCode中新配置一个ros项目

如何从零开始配置一个ros项目 预先准备初始化ros工程运行hello_ros进行第一个示例进行编译测试 预先准备 首先要在vscode中安装(必须安装的):ros,c,cmake,cmake tools(补全camkelist文件&#…

vue+nodejs+uniapp婚纱定制婚庆摄影系统 微信小程序 springboot+python

目前移动互联网大行其道,人人都手中拿着智能机,手机手机,手不离机,如果开发一个用在手机上的程序软件,那是多么的符合潮流,符合管理者和客户的理想。本次就是开发婚庆摄影小程序,有管理员&#…

第3部分 原理篇2去中心化数字身份标识符(DID)(1)

3.2. 去中心化数字身份标识符(DID) 3.2.1. 本节主要内容 3.2.1.1. 本节内容概述 本聪老师:首先是DID标识符。 小明:能否先简单介绍一下DID标识符是什么?工作原理是什么? 本聪老师:好的。DID…

MyBatis---初阶

一、MyBatis作用 是一种更简单的操作和读取数据库的工具。 二、MyBatis准备工作 1、引入依赖 2、配置Mybatis(数据库连接信息) 3、定义接口 Mapper注解是MyBatis中用来标识接口为Mapper接口的注解。在MyBatis中,Mapper接口是用来定义SQL映射的接口,通…

目标检测卷王YOLO卷出新高度:YOLOv9问世

论文摘要:如今的深度学习方法重点关注如何设计最合适的目标函数,使得模型的预测结果能够最接近真实情况。 同时,必须设计一个适当的架构,可以帮助获取足够的信息进行预测。 现有方法忽略了一个事实,即当输入数据经过逐层特征提取和空间变换时,大量信息将会丢失。 本文将深…

【flutter】环境安装

安装flutter sdk 下载sdk flutter sdk就包含dart,所以我们只用安装flutter sdk就可以了。 我们去清华大学开源软件镜像站下载,flutter开发中,版本对不上基本项目就跑步起来,如果是团队协同开发的话,建议统一下载指定版…

HarmonyOS Stage模型 应用配置文件讲解

好,上文 HarmonyOS Stage模型基本概念讲解 中,我们简单讲解了HarmonyOS 中 Stage模型的基本概念 那么 我们继续学习Stage模型的相关知识 上文之后 我们肯定对它的概念和基本结构 有了一个了解 那么 我们就来看一下 基于Stage模型 它里面一些基本的配置文…

电脑蓝牙在哪里打开?1分钟轻松打开蓝牙!

“我在操作电脑的时候想将电脑的蓝牙打开来连接音响和键盘,但是不知道电脑蓝牙应该如何打开,有什么比较简单的方法吗?” 随着无线技术的日益发展,蓝牙已成为连接各种设备的重要桥梁。无论是传输文件、音频还是与外部设备进行通信&…

驶向未来:3D可视化模型重塑我们的道路认知

在科技的浪潮中,每一个革新都是对人类未来生活的深度洞察。而今,当可视化这一技术走进我们的视野,它不仅是一场视觉盛宴,更是一次对未来出行方式的全新探索。 一、从平面到立体,解锁道路新视角 你是否曾站在十字路口&…

Spring Boot项目中TaskDecorator的应用实践

一、前言 TaskDecorator是一个执行回调方法的装饰器,主要应用于传递上下文,或者提供任务的监控/统计信息,可以用于处理子线程与主线程间数据传递的问题。 二、开发示例 1.自定义TaskDecorator import org.springframework.core.task.Task…

websocket入门及应用

websocket When to use a HTTP call instead of a WebSocket (or HTTP 2.0) WebSocket 是基于TCP/IP协议,独立于HTTP协议的通信协议。WebSocket 是双向通讯,有状态,客户端一(多)个与服务端一(多&#xff09…

java数据结构与算法刷题-----LeetCode106. 从中序与后序遍历序列构造二叉树

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 1. 法一:递归 解题思路:时间复杂度O(n),空间复杂度…

运维SRE-15 自动化批量管理-ansible1

## 1.什么是自动化批量管理重复性工作与内容: 思考如何自动化完成. 部署环境,批量查看信息,批量检查:自动化 一般步骤:1.如何手动实现2.如何自动化管理工具,批量实现3.注意事项:想要自动化一定要先标准化(所有环境,软件,目录一致)…

vue+node.js美食分享推荐管理系统 io551

,本系统采用了 MySQL数据库的架构,在开始这项工作前,首先要设计好要用到的数据库表。该系统的使用者有二类:管理员和用户,主要功能包括个人信息修改,用户、美食类型、美食信息、订单信息、美食分享、课程大…

基于Python网络爬虫的IT招聘就业岗位可视化分析推荐系统

文章目录 基于Python网络爬虫的IT招聘就业岗位可视化分析推荐系统项目概述招聘岗位数据爬虫分析系统展示用户注册登录系统首页IT招聘数据开发岗-javaIT招聘数据开发岗-PythonIT招聘数据开发岗-AndroidIT招聘数据开发岗-其它招聘岗位数据分析算法方面运维方面测试方面招聘岗位薪…

xff注入 [CISCN2019 华东南赛区]Web111

打开题目 看见smarty 想到模板注入 又看见ip 想到xff注入 一般情况下输入{$smarty.version}就可以看到返回的smarty的版本号。该题目的Smarty版本是3.1.30 在Smarty3的官方手册里有以下描述: Smarty已经废弃{php}标签,强烈建议不要使用。在Smarty 3.1&#xff…

vue3+js 实现记住密码功能

常见的几种实现方式 1 基于spring security 的remember me 功能 ​​​​​​​ localStorage 除非主动清除localStorage 里的信息 ,不然永远存在,关闭浏览器之后下次启动仍然存在 存放数据大小一般为5M 不与服务器进行交互通信 cookies 可以…

解决弹性布局父元素设置高自动换行,子元素均分高度问题(align-content: flex-start)

案例&#xff1a; <view class"abc"><view class"abc-item" v-for"(item,index) in 8" :key"index">看我</view> </view> <style lang"less">.abc{height: 100px;display: flex;flex-wrap: …

Sublime Text4配置C#运行环境

这里写自定义目录标题 前言部署.NET环境Sublime Text4配置C#编译环境1. 下载插件 运行测试 前言 今天把家里的9年前的远古神机搬了出来&#xff0c;重装了个win7的精简版&#xff0c;本打算装个VScode测试一下是否能写C#代码&#xff0c;结果是可以的&#xff0c;但&#xff0…

ESP8266智能家居(4)——开发APP基础篇

1.前期准备 安装好Android studio 开发环境 准备一台完好的安卓手机 手机要处于开发者模式 设置 --->关于手机---> 一直点击版本号 &#xff08;不同手机进入开发者模式的步骤可能不太一样&#xff09; 进入开发者模式后&#xff0c;找到辅助功能&#xff0c;打开开…
推荐文章