面试必看!Flink VS Spark 之内存管理机制详解

大家好,我是老兵。

内存IO一直是分布式系统的核心内容。进程间数据交换、读写,尤其是海量数据的复杂运算将消耗机器的大量内存,如何有效管理使用内存是考量优秀架构设计的重要一环。

作为在流处理和批处理领域的优秀框架代表—FlinkSpark,其内部均有完善的内存管理模式,本期老兵将带大家学习两者的内存管理机制,希望能给大家予以些许帮助。

1 Flink内存管理机制

Apache Flink是开源的大数据实时计算框架,具有分布式、高性能、内存计算等特点。Flink因其独特的流批一体设计模式,被广泛应用于实时离线数据应用场景。

Flink的数据流计算中分布式快照状态会占用大量内存,其内部是如何管理内存的呢?

1.1 Flink 内存模型

这里只看TaskManager的内存模型,JobManger内存模型比较简单,可自行百度~

Flink 内存模型

Flink 内存模型

1)整体结构

  • TaskManager内存:Flink TM内存 + JVM内存

  • Flink TM内存:堆内内存 + 堆外内存

  • 堆内内存:框架堆上内存 + Task堆上内存

  • 堆外内存:直接内存 + 管理内存 + JVM内存

  • 直接内存:框架堆外内存 + Task堆外内存 + 网络缓冲区

  • JVM内存:JVM元空间 + JVM执行开销

2)JVM 元空间(JVM Metaspace)

  • 存放JVM元数据:比如JVM class对象、方法名等

  • 参数:taskmanager.memory.jvm-metaspace.size,默认为256M

3)JVM 执行开销(over-head)

  • JVM执行时内存,包含线程、栈堆、IO与编译缓存使用的内存

  • 配置参数
    • taskmanager.memory.jvm-overhead.fraction,默认0.1(根据TM进程内存占比,阈值在min-max间)

    • taskmanager.memory.jvm-overhead.min:默认192M

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值