Flink性能优化之网络缓存优化

Flink 将 JVM 堆内存切分为三个部分,其中一部分为 Network Buffers 内存。Network Buffers 内存是 Flink 数据交互层的关键内存资源,主要目的是缓存分布式数据处理过程中 的输入数据。。通常情况下,比较大的 Network Buffers 意味着更高的吞吐量。如果系统出 现”Insufficient number of network buffers”的错误,一般是因为 Network Buffers 配置过低导致,因此,在这种情况下需要适当调整 TaskManager 上 Network Buffers 的内存 大小,以使得系统能够达到相对较高的吞吐量。

目前 Flink 能够调整 Network Buffer 内存大小的方式有两种:一种是通过直接指定 Network Buffers 内存数量的方式,另外一种是通过配置内存比例的方式。

直接设定 Nework Buffer 数量需要通过如下公式计算得出: NetworkBuffersNum = total-degree-of-parallelism * intra-node-parallelism * n 其 中 total-degree-of-parallelism 表 示 每 个 TaskManager 的 总 并 发 数 量 , intra-node-parallelism 表示每个 TaskManager 输入数据源的并发数量,n 表示在预估计算 过程中 Repar-titioning 或 Broadcasting 操作并行的数量。intra-node-parallelism 通常 情况下与 Task-Manager 的所占有的 CPU 数一致,且 Repartitioning 和 Broadcating 一般下 不会超过 4 个并发。可以将计算公式转化如下: NetworkBuffersNum = ^2 * < TMs>* 4

其中 slots-per-TM 是每个 TaskManager 上分配的 slots 数量,TMs 是 TaskManager 的 总数量。对于一个含有 20 个 TaskManager,每个 TaskManager 含有 8 个 Slot 的集群来说, 总共需要的 Network Buffer 数量为 8^2 _20_4=5120 个,因此集群中配置 Network Buffer 内存的大小约为 300M 较为合适。

计算完 Network Buffer 数量后,可以通过添加如下两个参数对 Network Buffer 内存进 行配置。其中 segment-size 为每个 Network Buffer 的内存大小,默认为 32KB,一般不需 要修改,通过设定 numberOfBuffers 参数以达到计算出的内存大小要求。
(1)taskmanager.network.numberOfBuffers:指定 Network 堆栈 Buffer 内存块的数量。
(2)taskmanager.memory.segment-size.:内存管理器和 Network 栈使用的内存 Buffer 大 小,默认为 32KB。

从 1.3 版本开始,Flink 就提供了通过指定内存比例的方式设置 Network Buffer 内存大小

Original: https://blog.51cto.com/u_15704423/5434867
Author: wx62be9d88ce294
Title: Flink性能优化之网络缓存优化

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/65935/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总