美文网首页
7. Flink中的内存管理是如何做的?

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

作者: bigdata张凯翔 | 来源:发表于2020-08-22 15:01 被阅读0次
    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大量使用堆外内存。详细参考:https://www.cnblogs.com/ooffff/p/9508271.html

    相关文章

      网友评论

          本文标题:7. Flink中的内存管理是如何做的?

          本文链接:https://www.haomeiwen.com/subject/mcxlzhtx.html