Flink 内存模型

Flink 1.10引入了更详细的内存模型,将TaskManager和JobManager的内存划分为多个区域,包括堆内和堆外内存。虽然增加了复杂性,但也提供了更多参数进行定制。默认情况下,用户只需设置总内存,Flink会自动分配。总内存分为Flink总内存、JVM Overhead、JVM Metaspace等部分,其中Flink总内存又包含堆内存(Heap Memory)和堆外内存(Off-Heap Memory)。堆内存用于Flink框架和任务,堆外内存则涉及排序、网络等。理解并适配内存模型能有效避免容器环境下出现OOM问题。

最新内存模型

flink1.10对内存使用进行了调整,模型划分更详细,但使初学者感觉更复杂了,从下图taskmanager内存模型可以看出一般。

flink内存按功能模块可分为taskmanager与jobmanger, 其中jobmanger不承担计算任务,所以相对简单无需过多讨论。

细分内存模型后,flink提供了大量参数来设置对应区块的大小,如下:

参数非常多,容易让人混乱,所以flink也提供了一个非常简单的内存设置方法,即只需设置进程总内存即可,进程总内存包括了flink在运行时需要的所有内存,包括堆内堆外内存等,例如当在k8s容器内运行时,该值就是容器申请到的内存大小,flink会按一定比例对总内存进行细分,当taskmanger,process.size=4G时,默认细分结果如下:

模型详细说明

通常情况下我们只需要设置进程总内存即可:taskmanager.memory.process.size/jobmanager.memory.process.size。

以taskmanager为例,进程总内存包括三部分:flink总内存(Total Flink Memory)+ 运行时JVM使用的内存(JVM Overhead + JVM metaspace)。

flink总内存包括flink使用到的堆内存(heap memory)与堆外内存(off-heap memory)。

flink使用到的堆内存包括flink框架本身用到的堆(framework memory)与flink任务使用到的堆(task memory).

flink使用到的堆外内存包括: 排序等用到的堆外内存(managed memory), 其它堆外内存(direct memory),其它堆外内存包括task、framework额外用到的堆外内存,以及network用到的堆外内存。

Flink内存模型 - 知乎

详解 Flink 容器化环境下的 OOM Killed

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值