开发者社区> 问答> 正文

Flink的内存管理具体是怎样做的啊?

Flink的内存管理具体是怎样做的啊?

展开
收起
游客5ixw6pdymb5xs 2021-12-08 13:22:07 517 0
1 条回答
写回答
取消 提交回答
  • Flink 并不是将大量对象存在堆上,而是将对象都序列化到一个预分配的内存块上。此外,Flink大量的使用了堆外内存。如果需要处理的数据超出了内存限制,则会将部分数据存储到硬盘上。Flink 为了直接操作二进制数据实现了自己的序列化框架。

    理论上Flink的内存管理分为三部分:

    Network Buffers:这个是在TaskManager启动的时候分配的,这是一组用于缓存网络数据的内存,每个块是32K,默认分配2048个,可以通过“taskmanager.network.numberOfBuffers”修改

    Memory Manage pool:大量的Memory Segment块,用于运行时的算法(Sort/Join/Shuffle等),这部分启动的时候就会分配。下面这段代码,根据配置文件中的各种参数来计算内存的分配方法。(heap or off-heap,这个放到下节谈),内存的分配支持预分配和lazy load,默认懒加载的方式。

    User Code,这部分是除了Memory Manager之外的内存用于User code和TaskManager本身的数据结构。

    2021-12-09 15:39:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Flink CDC Meetup PPT - 龚中强 立即下载
Flink CDC Meetup PPT - 王赫 立即下载
Flink CDC Meetup PPT - 覃立辉 立即下载