Flink内存配置

前言

本文介绍的内存配置方法只适用于Flink 1.10及以上版本。

相关配置详细说明: Flink Config

配置 Flink 进程的内存

Flink JVM 进程的进程总内存(Total Process Memory)包含了由 Flink 应用使用的内存(Flink 总内存)以及由运行 Flink 的 JVM 使用的内存。 Flink 总内存(Total Flink Memory)包括 JVM 堆内存(Heap Memory)和堆外内存(Off-Heap Memory)。 其中堆外内存包括直接内存(Direct Memory)和本地内存(Native Memory)。


image.png

配置 Flink 进程内存最简单的方法是指定以下两个配置项中的任意一个:

配置项 TaskManager 配置参数 JobManager 配置参数
Flink 总内存 taskmanager.memory.flink.size jobmanager.memory.flink.size
进程总内存 taskmanager.memory.process.size jobmanager.memory.process.size

配置 TaskManager 内存

Flink 的 TaskManager 负责执行用户代码。 根据实际需求为 TaskManager 配置内存将有助于减少 Flink 的资源占用,增强作业运行的稳定性。

内存模型

image.png

如上图所示,下表中列出了 Flink TaskManager 内存模型的所有组成部分,以及影响其大小的相关配置参数。

组成部分 配置参数 描述
Framework Heap Memory taskmanager.memory.framework.heap.size 用于 Flink 框架的 JVM 堆内存(进阶配置)。
Task Heap Memory taskmanager.memory.task.heap.size 用于 Flink 应用的算子及用户代码的 JVM 堆内存。
Managed memory taskmanager.memory.managed.size<br />taskmanager.memory.managed.fraction 由 Flink 管理的用于排序、哈希表、缓存中间结果及 RocksDB State Backend 的本地内存。
Framework Off-heap Memory taskmanager.memory.framework.off-heap.size 用于 Flink 框架的堆外内存(直接内存或本地内存)(进阶配置)。
Task Off-heap Memory taskmanager.memory.task.off-heap.size 用于 Flink 应用的算子及用户代码的堆外内存(直接内存或本地内存)
Network Memory taskmanager.memory.network.min<br />taskmanager.memory.network.max <br />taskmanager.memory.network.fraction 用于任务之间数据传输的直接内存(例如网络传输缓冲)。该内存部分为基于 Flink 总内存受限的等比内存部分
JVM Metaspace taskmanager.memory.jvm-metaspace.size Flink JVM 进程的 Metaspace。
JVM Overhead taskmanager.memory.jvm-overhead.min<br />taskmanager.memory.jvm-overhead.max<br />taskmanager.memory.jvm-overhead.fraction 用于其他 JVM 开销的本地内存,例如栈空间、垃圾回收空间等。该内存部分为基于进程总内存受限的等比内存部分

框架内存

通常情况下,不建议对框架堆内存框架堆外内存进行调整。 除非你非常肯定 Flink 的内部数据结构及操作需要更多的内存。 这可能与具体的部署环境及作业结构有关,例如非常高的并发度。 此外,Flink 的部分依赖(例如 Hadoop)在某些特定的情况下也可能会需要更多的直接内存或本地内存。

内存计算

假设只配置 Total Process Memory = 2gb

Total Process Memory = Total Flink Memory +JVM Metaspace +JVM Overhead

JVM Metaspace 通过taskmanager.memory.jvm-metaspace.size配置, 默认96mb

JVM Overhead 计算:

配置参数 默认值
taskmanager.memory.jvm-overhead.min 192mb
taskmanager.memory.jvm-overhead.max 1gb
taskmanager.memory.jvm-overhead.fraction 0.1

首先计算 JVM Overhead = Total Process Memory * taskmanager.memory.jvm-overhead.fraction = 2gb*0.1 = 204.8mb

如果计算出来的JVM Overhead < taskmanager.memory.jvm-overhead.min则为taskmanager.memory.jvm-overhead.min;

如果计算出来的JVM Overhead > taskmanager.memory.jvm-overhead.max则为taskmanager.memory.jvm-overhead.max;

如果计算出来的 taskmanager.memory.jvm-overhead.min <= JVM Overhead <= taskmanager.memory.jvm-overhead.max 则为JVM Overhead .

因为 192mb< 204.8mb <1gb, 所以 JVM Overhead=204.8mb

Total Flink Memory = Total Process Memory - JVM Metaspace- JVM Overhead = 2gb - 96mb - 204.8mb = 1747.2mb

Managed memory = Total Flink Memory * taskmanager.memory.managed.fraction = 1747.2mb * 0.4 = 698.88mb

Framework Off-heap Memory通过taskmanager.memory.framework.off-heap.size配置, 默认128mb

Task Off-heap Memory 默认为0byte

Network Memory 计算方式同JVM overhead

配置参数 默认值
taskmanager.memory.network.min 64mb
taskmanager.memory.network.max 1gb
taskmanager.memory.network.fraction 0.1

Total Flink Memory * taskmanager.memory.network.fraction = 1747.2mb * 0.1 = 174.72mb

64mb < 174.72mb < 1gb,所以 Network Memory=174.72mb

Direct Memory = Framework Off-heap Memory + Task Off-heap Memory + Network Memory = 128mb + 0 + 174.72mb = 302.72mb

**Off Heap Memory **= Managed memory + Direct Memory = 698.88mb + 302.72mb = 1001.6mb

JVM Heap = Total Flink Memory - Off Heap Memory = 1747.2mb - 1001.6mb = 745.6mb  与web-ui显示一致

Framework Heap Memory 通过taskmanager.memory.framework.heap.size配置, 默认128mb

Task Heap 剩下的内存 JVM Heap- Framework Heap Memory = 617.6mb

配置 JobManager 内存

JobManager 是 Flink 集群的控制单元。 它由三种不同的组件组成:ResourceManager、Dispatcher 和每个正在运行作业的 JobMaster。

内存模型

image.png

如上图所示,下表中列出了 Flink JobManager 内存模型的所有组成部分,以及影响其大小的相关配置参数。

组成部分 配置参数 描述
JVM Heap jobmanager.memory.heap.size JobManager 的 JVM 堆内存
Off Heap jobmanager.memory.off-heap.size JobManager 的堆外内存(直接内存或本地内存)
JVM Metaspace jobmanager.memory.jvm-metaspace.size Flink JVM 进程的 Metaspace。
JVM Overhead jobmanager.memory.jvm-overhead.min<br /> jobmanager.memory.jvm-overhead.max<br />jobmanager.memory.jvm-overhead.fraction 用于其他 JVM 开销的本地内存,例如栈空间、垃圾回收空间等。该内存部分为基于进程总内存受限的等比内存
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349