【Flink】内存分布

回忆版

相关配置详细说明: 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)。

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

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

配置 TaskManager 内存

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

内存模型

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

组成部分配置参数描述
Framework Heap Memorytaskmanager.memory.framework.heap.size用于 Flink 框架的 JVM 堆内存(进阶配置)。
Task Heap Memorytaskmanager.memory.task.heap.size用于 Flink 应用的算子及用户代码的 JVM 堆内存。
Managed memory

taskmanager.memory.managed.size

taskmanager.memory.managed.fraction

由 Flink 管理的用于排序、哈希表、缓存中间结果及 RocksDB State Backend 的本地内存。
Framework Off-heap Memorytaskmanager.memory.framework.off-heap.size用于 Flink 框架的堆外内存(直接内存或本地内存)(进阶配置)。
Task Off-heap Memorytaskmanager.memory.task.off-heap.size用于 Flink 应用的算子及用户代码的堆外内存(直接内存或本地内存)
Network Memory

taskmanager.memory.network.min

taskmanager.memory.network.max

taskmanager.memory.network.fraction

用于任务之间数据传输的直接内存(例如网络传输缓冲)。该内存部分为基于 Flink 总内存受限的等比内存部分
JVM Metaspacetaskmanager.memory.jvm-metaspace.sizeFlink JVM 进程的 Metaspace。
JVM Overhead

taskmanager.memory.jvm-overhead.min

taskmanager.memory.jvm-overhead.max

taskmanager.memory.jvm-overhead.fraction

用于其他 JVM 开销的本地内存,例如栈空间、io、垃圾回收空间、编译缓存等。该内存部分为基于进程总内存受限的等比内存部分

框架内存

通常情况下,不建议对框架堆内存框架堆外内存进行调整。 除非你非常肯定 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.min192mb
taskmanager.memory.jvm-overhead.max1gb
taskmanager.memory.jvm-overhead.fraction0.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 MetaspaceJVM 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.min64mb
taskmanager.memory.network.max1gb
taskmanager.memory.network.fraction0.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 HeapFramework Heap Memory = 617.6mb

配置 JobManager 内存

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

内存模型

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

组成部分配置参数描述
JVM Heapjobmanager.memory.heap.sizeJobManager 的 JVM 堆内存
Off Heapjobmanager.memory.off-heap.sizeJobManager 的堆外内存(直接内存或本地内存)
JVM Metaspacejobmanager.memory.jvm-metaspace.sizeFlink JVM 进程的 Metaspace。
JVM Overhead

jobmanager.memory.jvm-overhead.min

jobmanager.memory.jvm-overhead.max

jobmanager.memory.jvm-overhead.fraction

用于其他 JVM 开销的本地内存,例如栈空间、垃圾回收空间等。该内存部分为基于进程总内存受限的等比内存



作者:zfylin
链接:https://www.jianshu.com/p/a29b7b7feaaf
来源:简书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值