Flink内存模型

flink官网上 的内存分布图如下:

Flink内存模型

Flink内存模型

1、processMemory

是分配的总大小,比如yarn分配的container的总大小。

2、framework memory与 task memory

framework不属于slot内存,而task是slot内的使用的内存

heap memory内存主要是java对象和stateBackend内存

Flink内存模型 

framework heap memory+task heap memory=jvm堆内存总大小(-Xmx)

framework off-heap memory+task off-heap memory=分配的堆外直接内存大小(-XX:MaxDirectMemorySize)

3、network memory(使用的是直接内存)

用于数据的传输,同一个taskExecutor的各个slot之间没有隔离

network memory的大小是由作业的拓扑决定的,不足会导致运行失败。

4、managed memory(native memory)

用于RocksDBStateBackend,Batch Operator,各个slot之间是相互隔离的

如果使用的是heapstatebackend或者没有状态,此时可以设置managed memory的内存为0