Apache Flink 的内存模型是其能够高效处理大规模数据流、保证高吞吐和低延迟的关键所在。 在 Flink 1.10 版本之后,社区对内存模型进行了重构,引入了更细粒度的内存控制。Flink 的内存管理主要分为 JobManager(控制节点) 和 TaskManager(工作节点) 两部分,其中 TaskManager 的内存模型最为复杂且关键。 以下是 Flink 内存模型的详细解析: --- 一、 核心设计理念 Flink 并没有完全依赖 JVM 的垃圾回收(GC)机制来管理内存,而是主动管理内存。这样做主要有三个目的: 1. 减少 GC 停顿:通过使用堆外内存(Off-Heap)和自定义的序列化机制,减少存活在 JVM 堆上的对象数量。 2. 避免 OOM(内存溢出):严格控制内存使用配额,当内存不足时将数据溢写到磁盘,而不是导致程序崩溃。 3. 节省空间:通过二进制存储数据,避免了 Java 对象头带来的额外开销。 --- 二、 TaskManager 内存模型 (重点) TaskManager 是执行作业实际计算逻辑的地方。它的内存布局可以看作一个洋葱结构,从外...