flink 源码阅读(2) 内存管理

239 阅读1分钟

0 前言

flink 我在工作中用的还挺多的,如何做好flink 内存管理是挺重要的 将之前研究的笔记做一下总结和汇总

1 内存总体结构

image.png 我们点到 org.apache.flink.runtime.util.config.memory.FlinkMemory 这个接口类中可以看的比较清楚 flink 的内存结构 在org.apache.flink.runtime.util.config.memory.taskmanager.TaskExecutorFlinkMemory

image.png

image.png

Flink使用内存=框架堆内和堆外内存+ Task堆内和堆外内存 + 网络缓冲内存 + 管理内存

1 各个内存块

⚫ JVM Heap:JVM 堆上内存

1、Framework Heap Memory:Flink 框架本身使用的内存,即 TaskManager 本身所 占用的堆上内存,不计入 Slot 的资源中。 占用的堆上内存,不计入 Slot 的资源中。 配置参数:taskmanager.memory.framework.heap.size=128MB,默认 128MB

2、Task Heap Memory:Task 执行用户代码时所使用的堆上内存。 配置参数:taskmanager.memory.task.heap.size

⚫ Off-Heap Mempry:JVM 堆外内存

1、DirectMemory:JVM 直接内存


1 Framework Off-Heap Memory:Flink框架本身所使用的内存,即TaskManager 本身所占用的对外内存,不计入 Slot 资源
配置参数:taskmanager.memory.framework.off-heap.size=128MB,默认 128MB

2 Task Off-Heap Memory:Task 执行用户代码所使用的对外内存。 配置参数:taskmanager.memory.task.off-heap.size=0,默认 0

3 Network Memory:网络数据交换所使用的堆外内存大小,如网络数据交换 缓冲区

2 Managed Memory:Flink 管理的堆外内存,用于排序、哈希表、缓存中间结果及 RocksDB State Backend 的本地内存。 配置参数: taskmanager.memory.managed.fraction=0.4 taskmanager.memory.managed.size

2 JobManager 内存分配

3 TaskManager 内存分配

未完待续