c语言sscanf函数的用法是什么
449
2022-11-17
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^2204=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。
设定 Network 内存比例(推荐)
从 1.3 版本开始,Flink 就提供了通过指定内存比例的方式设置 Network Buffer 内存大小
taskmanager.network.memory.fraction: JVM 中用于 Network Buffers 的内存比例。 taskmanager.network.memory.min: 最小的 Network Buffers 内存大小,默认为 64MB。 taskmanager.network.memory.max: 最大的 Network Buffers 内存大小,默认 1GB。 taskmanager.memory.segment-size: 内存管理器和 Network 栈使用的 Buffer 大小,默 认为 32KB。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~