可根据官网了解Flink 内存配置:配置 TaskManager 内存 | Apache Flink
组成部分 | 配置参数 | 描述 |
用于 Flink 框架的 JVM 堆内存(进阶配置)。 | ||
用于 Flink 应用的算子及用户代码的 JVM 堆内存。 | ||
taskmanager.memory.managed.sizetaskmanager.memory.managed.fraction | 由 Flink 管理的用于排序、哈希表、缓存中间结果及 RocksDB State Backend 的本地内存。 | |
用于 Flink 框架的堆外内存(直接内存或本地内存)(进阶配置)。 | ||
用于 Flink 应用的算子及用户代码的堆外内存(直接内存或本地内存)。 | ||
网络内存(Network Memory) | taskmanager.memory.network.mintaskmanager.memory.network.max | 用于任务之间数据传输的直接内存(例如网络传输缓冲)。该内存部分为基于 Flink 总内存的受限的等比内存部分。这块内存被用于分配网络缓冲 |
Flink JVM 进程的 Metaspace。 | ||
JVM 开销 | taskmanager.memory.jvm-overhead.mintaskmanager.memory.jvm-overhead.max |
在生产使用一段时间后发现 托管内存(默认是Total memory* 0.4)和网络开销内存(0.1)使用较少。所以选择降低这两部分的内存。
修改托管内存两种方式:
1.通过 taskmanager.memory.managed.size 明确指定其大小。
2.通过 taskmanager.memory.managed.fraction 指定在Flink 总内存中的占比。
修改网络内存(Network Memory)方式:
taskmanager.memory.network.fraction 指定在Flink 总内存中的占比。
托管内存应用场景通常在RocksDB状态后端下分配给RocksDB来存储状态数据的,因此在使用HashMap状态后端的情况下,我们可以将托管内存设置为0来将更多的内存提供给HashMap状态后端使用
当同时指定二者时,会优先采用taskmanager.memory.managed.size,若二者均未指定,会根据taskmanager.memory.managed.fraction的默认值0.4计算得到托管内存的大小