Flink NetworkBuffer 动态申请

Flink 4年前 (2021) 农夫的狗
606 0

Flink NetworkBuffer 动态申请

背景

Flink 中 Network Buffer 相关配置对用户来说比较复杂,用户很难去配置一个合理的值,使用过程中主要以下两方面问题
  1. NetworkBuffer 不够导致的作业启动失败
  1. 大部分作业 NetworkBuffer 浪费严重
期望寻找一种合理的方式来解决 NetworkBuffer 不足导致的作业启动失败的问题,减少 NetworkBuffer 内存浪费,提升内存资源利用率

现状

目前的配置方式

  1. 通过参数配置每个 TM 上 network buffer 比例&大小
  1. TM 中 NetworkBufferPool 对 Network Buffer 进行统一管理,TM 启动时就会分配所有内存
备注:NetworkBuffer 支持堆内/堆外(默认)内存两种方式

NetworfBuffer 分配规则

  1. NetworkBufferPool 对 TM 上 NetworkBuffer Quota 作统一管理,每次 Deploy/Cancel Task 会将 NetworkBuffer Quota 在各 Task 之间做均衡
  1. 每个 Task NetworkBuffer 需求量和上下游的并发度相关:有最低限制,不够会导致启动失败
  1. 多余的 NetworkBuffer 在各 Task 之间均分

相关代码

  1. NetworkBufferPool
  1. ResultPartitionFactory
  1. SingleInputGateFactory

可选方案

Deploy/Cancle Task 时对 NetworkBufferPool 进行动态伸缩

  1. NetworkBuffer 依然需要用户配置上限,无限制的扩张会导致OOM或者GC等问题
  1. 相比现有实现,只在需要的时候才实际分配 NetworkBuffer,对于浪费的情况可节省部分物理内存

根据 DAG 在 JM/Client 侧计算 TM 中 NetworkBuffer 比例

  1. 用户只需配置 TM 总资源,NetworkBuffer 比例根据 DAG 计算
  1. NetworkBuffer 可以计算的相对精确,同样可以节省被 NetworkBuffer 浪费的部分物理内存
  1. 内存不足的问题从其他方面反映出来:启动时内存不够直接失败、运行时GC等问题,遇到问题之后用户只需加 TM 总内存
备注:NetworkBuffer 数量变少对性能带来的影响待评估

Operator 粒度的资源控制&TM资源异构

  1. Operator 粒度的资源控制:State内存/NetworkBuffer内存/...
  1. 根据 Operator 在 JM 中定制 TM 的资源
  1. 需要很完善的工具链来做支撑
  1. ...
版权声明:农夫的狗 发表于 2021-01-11 10:52:47。
转载请注明:Flink NetworkBuffer 动态申请 | 404导航

暂无评论

暂无评论...