本文所讲的Flink内存模型都是1.10版本及以上。

官网简易图

simple_mem_model.svg

Flink Memory

官网详细图

detailed-mem-model.svg

Task和Framwork各有Heap和Off-Heap。上图中8块内存都有参数可以调节。
Flink 1.10版本没有对Task和Framework之间进行隔离,只是为了后续升级做准备才提前分割出这些概念,方便用户后续升级。
Task、网络、Managed三块需要关注调整。

Direct Memory

Direct Memory是使用Java中allocateDirect()方法直接开辟的一块内存,不受GC管理,自己控制。

堆外内存

堆外内存一共就四块。除了Task、Framework的两块外,就是针对网络和针对RocksDB的两块。

Network Memory

一共就以下3个参数

  • taskmanager.memory.network.fraction
  • taskmanager.memory.network.max
  • taskmanager.memory.network.min

    Managed Memory

    Managed主要是对应RocksDB。如果不用RocksDB StateBackend可以设置成0。
    可以通过如下两个选项调节。

  • taskmanager.memory.managed.size

  • taskmanager.memory.managed.fraction
  • state.backend.rocksdb.memory.managed:默认是true,会保证RocksDB内存不会超过Managed Memory大小。