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.sizetaskmanager.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.mintaskmanager.memory.network.maxtaskmanager.memory.network.fraction |
用于任务之间数据传输的直接内存(例如网络传输缓冲)。该内存部分为基于 Flink 总内存的受限的等比内存部分。 |
| JVM Metaspace | taskmanager.memory.jvm-metaspace.size |
Flink JVM 进程的 Metaspace。 |
| JVM 开销 | taskmanager.memory.jvm-overhead.mintaskmanager.memory.jvm-overhead.maxtaskmanager.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 |
Flink 负责分配和管理的本地(堆外)内存 |
| 直接内存 | taskmanager.memory.task.off-heap.size | 用户代码中分配的堆外内存 |
四、jobmanager内存管理
JobManager 是 Flink 集群的控制单元。 它由三种不同的组件组成:ResourceManager、Dispatcher 和每个正在运行作业的 JobMaster。
| 配置项 | 配置参数 | 解释 |
|---|---|---|
| 堆内存 | jobmanager.memory.heap.size |
用于(1)Flink 框架 (2)在作业提交时(例如一些特殊的批处理 Source)及 Checkpoint 完成的回调函数中执行的用户代码 |
| 堆外内存 |
|
用于(1)Flink 框架依赖(例如 Akka 的网络通信)(2)在作业提交时(例如一些特殊的批处理 Source)及 Checkpoint 完成的回调函数中执行的用户代码 是否启用 JVM 直接内存限制。 如果该配置项设置为 堆外内存的大小,如遇 JobManager 进程抛出 “OutOfMemoryError: Direct buffer memory” 的异常,可以尝试调大该配置 |
| JVM Metaspace | jobmanager.memory.jvm-metaspace.size |
Flink JVM 进程的元空间 |
| JVM Overhead | jobmanager.memory.jvm-overhead.minjobmanager.memory.jvm-overhead.maxjobmanager.memory.jvm-overhead.fraction |
用于其他 JVM 开销的本地内存,例如栈空间、垃圾回收空间等。该内存部分为基于进程总内存的受限的等比内存部分 |

浙公网安备 33010602011771号