Flink内存模型

1.概述

flink内存按功能模块可分为taskmanager与jobmanger。

  • JobManager:负责接收 flink 的作业,调度 task,收集 job 的状态、管理 TaskManagers。jobmanage启动,再启动task。不承担计算任务。模型如下:

  • TaskManager:所有执行任务的基本容器,提供了内存管理、IO管理、通信管理等。模型如下:

2.内存配置参数

3.TaskManager

taskmanager进程总内存包括三部分:

​flink总内存(Total Flink Memory)+ 运行时JVM使用的内存(JVM Overhead + JVM metaspace)

其中,

​flink总内存(Total Flink Memory):堆内存(JVM heap)+ 堆外内存(off-heap memory)。

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

​堆外内存(off-heap memory)包括:排序等用到的堆外内存(managed memory),其它堆外内存(direct memory),

​其它堆外内存(direct memory)包括:task、framework额外用到的堆外内存,以及network用到的堆外内存。

3.1 堆内存(JVM heap)

​flink框架本身用到的堆(framework heap)

taskmanager.memory.framework.heap.size参数控制,运行所需资源比较轻量级,默认为128M

flink任务使用到的堆(task heap)

专门用于执行Flink任务的堆内存空间。该堆的大小由taskmanager.memory.task.heap.size参数指定。默认为:Total Flink Memory – Framework Heap – Task off-heap memory – Managed Memory – Network Memory

3.2 堆外内存(off-heap memory)

排序等用到的堆外内存(managed memory)

​由Flink直接管理的off-heap内存,主要用于排序、哈希表、中间结果缓存、RocksDB的backend。由taskmanager.memory.managed.size 参数直接配置指定,默认是不配置的。通过taskmanager.memory.managed.fraction来设置Managed off-heap memory因子,默认为0.4(表示Total Flink Memory的40%)​

其它堆外内存(direct memory)

  • framework off-heap:Task Executor保留的off-heap memory,不会分配给任何slot。可以通过taskmanager.memory.framework.off-heap.size参数指定,默认为128M​
  • task off-heap:Task Executor执行的Task所使用的堆外内存。如果在Flink应用的代码中调用了Native的方法,需要用到off-heap内存,这些内存会分配到Off-heap堆外内存中。可以通过指定taskmanager.memory.task.off-heap.size来配置,默认为0。如果代码中需要调用Native Method并分配堆外内存,可以指定该参数。一般不使用。​
  • network:在Task与Task之间进行数据交换时(shuffle),需要将数据缓存下来,缓存能够使用的内存大小就是这个Network Memory。它由是三个参数决定:

taskmanager.memory.network.min:默认为64MB

taskmanager.memory.network.max:默认为1gb

taskmanager.memory.network.fraction:默认为0.1​

两种配置方式,一种是通过taskmanager.memory.network.fraction参数,也就是Total Flink Memory的百分比,默认为Total Flink Meory的10%。还有一种是通过taskmanager.memory.network.min和taskmanager.memory.network.max指定shuffle缓存在min-max之间的内存空间。如果使用fraction计算出来的Network Meory超出min-max的范围,那么以min-max为准。如果配置的min和max是一样的值,就使用固定的内存大小。​

4.JVM Metaspace Memory

​从JDK 8开始,JVM把永久代拿掉了。类的一些元数据放在叫做Metaspace的Native Memory中。在Flink中的JVM Metaspace Memory也一样,它配置的是Task Manager JVM的元空间内存大小。通过taskmanager.memory.jvm-metaspace.size参数配置,默认为256MB。​

5.JVM Overhead

​保留给JVM其他的内存开销。例如:Thread Stack、code cache、GC回收空间等等。和Network Memory的配置方法类似。它也由三个配置决定:​

taskmanager.memory.jvm-overhead.min:默认为192MB,

taskmanager.memory.jvm-overhead.max:默认为1GB

taskmanager.memory.jvm-overhead.fraction:默认为0.1。

​6.设置内存

flink提供了一个非常简单的内存设置方法,即只需设置进程总内存即可:​

taskmanager.memory.process.size=XXg​

jobmanager.memory.process.size=XXg​

​​

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值