开发者社区> 问答> 正文

Flink中的内存管理是如何做的?

Flink中的内存管理是如何做的?

展开
收起
茶什i 2019-11-21 10:55:07 1086 0
1 条回答
写回答
取消 提交回答
  • Flink 并不是将大量对象存在堆上,而是将对象都序列化到一个预分配的内存块上,这个内存块叫做 MemorySegment,它代表了一段固定长度的内存(默认大小为 32KB),也是 Flink 中最小的内存分配单元,并且提供了非常高效的读写方法。每条记录都会以序列化的形式存储在一个或多个MemorySegment中。

    Flink堆内存划分:

    image.png

    Network Buffers: 一定数量的32KB大小的缓存,主要用于数据的网络传输。在 TaskManager启动的时候就会分配。默认数量是2048个,可以通过 taskmanager.network.numberOfBuffers来配置。

    Memory Manager Pool:这是一个由MemoryManager管理的,由众多MemorySegment组成的超大集合。Flink中的算法(如 sort/shuffle/join)会向这个内存池申请MemorySegment,将序列化后的数据存于其中,使用完后释放回内存池。默认情况下,池子占了堆内存的70% 的大小。

    Remaining (Free) Heap: 这部分的内存是留给用户代码以及TaskManager 的数据结构使用的,可以把这里看成的新生代。

    Flink大量使用堆外内存。

    2019-11-21 10:56:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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