Flink的内存管理

一、内存构成详解

 

 

组成部分    配置参数    描述  
框架堆内存(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
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
taskmanager.memory.network.max
taskmanager.memory.network.fraction
用于任务之间数据传输的直接内存(例如网络传输缓冲)。该内存部分为基于 Flink 总内存的受限的等比内存部分。
JVM Metaspace taskmanager.memory.jvm-metaspace.size Flink JVM 进程的 Metaspace。
JVM 开销 taskmanager.memory.jvm-overhead.min
taskmanager.memory.jvm-overhead.max
taskmanager.memory.jvm-overhead.fraction
用于其他 JVM 开销的本地内存,例如栈空间、垃圾回收空间等。该内存部分为基于进程总内存的受限的等比内存部分。

二、总内存管理

 

  配置项    TaskManager 配置参数    JobManager 配置参数  解释适用场景
Flink 总内存 taskmanager.memory.flink.size jobmanager.memory.flink.size flink所需内存 单机部署
进程总内存 taskmanager.memory.process.size jobmanager.memory.process.size JVM运行flink所需内存 容器化部署

三、taskmanager内存管理

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

 

  配置项    TaskManager 配置参数  解释
堆内存 taskmanager.memory.task.heap.size 用于 Flink 算子及用户代码的执行
托管内存

taskmanager.memory.managed.size
taskmanager.memory.managed.fraction
taskmanager.memory.managed.consumer-weights

Flink 负责分配和管理的本地(堆外)内存
托管内存在Flink总内存中占比
消费者分配(DATAPROC/PYTHON)

直接内存 taskmanager.memory.task.off-heap.size  用户代码中分配的堆外内存

四、jobmanager内存管理

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

  配置项  配置参数    解释
堆内存 jobmanager.memory.heap.size 用于(1)Flink 框架 (2)在作业提交时(例如一些特殊的批处理 Source)及 Checkpoint 完成的回调函数中执行的用户代码
堆外内存

jobmanager.memory.enable-jvm-direct-memory-limit 

jobmanager.memory.off-heap.size

用于(1)Flink 框架依赖(例如 Akka 的网络通信)(2)在作业提交时(例如一些特殊的批处理 Source)及 Checkpoint 完成的回调函数中执行的用户代码

是否启用 JVM 直接内存限制。 如果该配置项设置为 true,Flink 会根据配置的堆外内存大小设置 JVM 参数 -XX:MaxDirectMemorySize

堆外内存的大小,如遇 JobManager 进程抛出 “OutOfMemoryError: Direct buffer memory” 的异常,可以尝试调大该配置

JVM Metaspace jobmanager.memory.jvm-metaspace.size Flink JVM 进程的元空间
JVM Overhead jobmanager.memory.jvm-overhead.min
jobmanager.memory.jvm-overhead.max
jobmanager.memory.jvm-overhead.fraction
用于其他 JVM 开销的本地内存,例如栈空间、垃圾回收空间等。该内存部分为基于进程总内存的受限的等比内存部分
posted @ 2021-07-20 10:19  xmalll  阅读(1197)  评论(0)    收藏  举报