码迷,mamicode.com
首页 > 其他好文 > 详细

Kafka 内存管理类BufferPool

时间:2020-10-16 10:35:02      阅读:22      评论:0      收藏:0      [点我收藏+]

标签:kafka   配置   固定   申请   info   部分   ola   src   height   

        基本上每个成熟的框架或者工具都有一套内存管理机制     

       BufferPool 是Kafka  用来管理内存的工具类

        BufferPool内存管理包含2个部分,已用空间+可用空间(未申请空间+已申请未使用空间) 的总和代表BufferPool的总量,用totalMemory表示(由buffer.memory配置);
可使用的空间,它又包括两个部分:上半部分代表未申请未使用的部分,用availableMemory表示;下半部分代表已经申请但没有使用的部分,用一个ByteBuffer队列(Deque<ByteBuffer>)表示,我们称这个队列为free,队列中的ByteBuffer的大小用poolableSize表示(由batch.size配置)。
 
    所以可以得到以下2个公式
    totalMemory = 已用空间+可用空间
    可用空间 = availableMemory + free.size() * poolableSize
 
     从BufferPool中分配固定size大小的内存的步骤:

技术图片

      tips:可用空间(未申请空间+已申请未使用空间)不能满足申请空间需求,需要通过释放已用空间内存来分配内存。

     内存初始化

     技术图片

 

   

      分配内存

      每次分配内存的时候,默认分配poolableSize大小的内存(poolableSize == batchSize)技术图片

 

     具体分配方案(这是源码分析,流程可以参考上面的流程图)

     技术图片

 

 技术图片

 

 技术图片

 

  内存释放

      技术图片

 

 

       

 

Kafka 内存管理类BufferPool

标签:kafka   配置   固定   申请   info   部分   ola   src   height   

原文地址:https://www.cnblogs.com/huxuhong/p/13651696.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!