flink参数优化_flink环境搭建

flink参数优化_flink环境搭建Flink性能调优的第一步,就是为任务分配合适的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考

大家好,欢迎来到IT知识分享网。

Flink性能调优的第一步,就是为任务分配合适的资源,在一定范围内,增加资源的分配与性能的提升是成正比的,实现了最优的资源配置后,在此基础上再考虑进行后面论述的性能调优策略。

提交方式主要是yarn-per-job,资源的分配在使用脚本提交Flink任务时进行指定。

标准的Flink任务提交脚本(Generic CLI 模式)

从1.11开始,增加了通用客户端模式,参数使用-D <property=value>指定:

bin/flink run \
-t yarn-per-job \
-d \
-p 5 \ 指定并行度
-Dyarn.application.queue=test \ 指定yarn队列
-Djobmanager.memory.process.size=1024mb \ 指定JM的总进程大小
-Dtaskmanager.memory.process.size=1024mb \ 指定每个TM的总进程大小
-Dtaskmanager.numberOfTaskSlots=2 \ 指定每个TM的slot数
-c com.atguigu.flink.tuning.UvDemo \
/opt/module/flink-1.13.1/myjar/flink-tuning-1.0-SNAPSHOT.jar

IT知识分享网

参数列表:https://ci.apache.org/projects/flink/flink-docs-release-1.13/deployment/config.html

1、内存设置

1.1 TaskManager内存模型

flink参数优化_flink环境搭建

Flink1.10对TaskManager内存模型做了较大改动,Flink使用了堆上内存和堆外内存:

  • Framework Heap&Framework Off-Heap:Flink框架内存使用了堆上内存和堆外内存,不计入slot资源
  • Task Heap&Task Off-Heap:Task执行的内存使用了堆上内存和堆外内存
  • NetWork(网络缓冲内存):网络数据交换所使用的堆外内存,入网络数据交换缓冲区
  • Direct Memory(直接内存) :框架堆外内存、Task堆外内存、网络缓冲内存,都在堆外的直接内存里
  • Managed Memory(托管内存):Flink管理的堆外内存。用于管理排序、哈希表、缓存中间结果及RocksDB State Backend的本地内存
  • JVM Metaspace&JVM Overhead(JVM特有内存):JVM本身占用的内存,包括元空间和执行开销

Total Flink Memory=Framework Heap+Framework Off-Heap+ask Heap+Task Off-Heap+NetWork+Managed Memory

Total Process Memory=Total Flink Memory+JVM Metaspace+JVM Overhead

1.2 内存模型详解

  • JVM 特定内存:JVM本身占用的内存,包括元空间和执行开销
  1. JVM metaspace:JVM元空间
    taskmanager.memory.jvm-metaspace.size,默认256mb
  2. JVM over-head执行开销:JVM执行时自身所需要的内容,包括线程堆栈、IO、编译缓存等所使用的内存。
    taskmanager.memory.jvm-overhead.fraction,默认0.1
    taskmanager.memory.jvm-overhead.min,默认192mb
    taskmanager.memory.jvm-overhead.max,默认1gb
    总进程内存*fraction,如果小于配置的min(或大于配置的max)大小,则使用min/max大小

  • 框架内存:Flink框架,即TaskManager本身所占用的内存,不计入Slot的资源中。
    堆内:taskmanager.memory.framework.heap.size,默认128MB
    堆外:taskmanager.memory.framework.off-heap.size,默认128MB

  • Task内存:Task执行用户代码时所使用的内存
    堆内:taskmanager.memory.task.heap.size,默认none,由Flink内存扣除掉其他部分的内存得到。
    堆外:taskmanager.memory.task.off-heap.size,默认0,表示不使用堆外内存

  • 网络缓冲内存:网络数据交换所使用的堆外内存大小,如网络数据交换缓冲区
    堆外:taskmanager.memory.network.fraction,默认0.1
    taskmanager.memory.network.min,默认64mb
    taskmanager.memory.network.max,默认1gb
    Flink内存*fraction,如果小于配置的min(或大于配置的max)大小,则使用min/max大小

  • 托管内存:用于RocksDB State Backend 的本地内存和批的排序、哈希表、缓存中间结果。
    堆外:taskmanager.memory.managed.fraction,默认0.4
    taskmanager.memory.managed.size,默认none
    如果size没指定,则等于Flink内存*fraction

2、案例分析

基于Yarn模式,一般参数指定的是总进程内存,taskmanager.memory.process.size,比如指定为4G,每一块内存得到大小如下:

  1. 计算Flink内存
    JVM元空间256m
    JVM执行开销: 4g*0.1=409.6m,在[192m,1g]之间,最终结果409.6m
    Flink内存=4g-256m-409.6m=3430.4m
  2. 网络内存=3430.4m0.1=343.04m,在[64m,1g]之间,最终结果343.04m
  3. 托管内存=3430.4m0.4=1372.16m
  4. 框架内存,堆内和堆外都是128m
  5. Task堆内内存=3430.4m-128m-128m-343.04m-1372.16m=1459.2m
flink参数优化_flink环境搭建

IT知识分享网JVM Options:	-Xmx1664299798                              #约1875M=Task堆内存+框架内存	-Xms1664299798                              	-XX:MaxDirectMemorySize=493921243           #约471M=Task堆外内存+框架堆外内存+网络内存	-XX:MaxMetaspaceSize=268435456              #256M=JVM元空间

所以进程内存给多大,每一部分内存需不需要调整可以看内存的使用率来调整。

3、生产资源配置示例

bin/flink run \
-t yarn-per-job \
-d \
-p 5 \ 指定并行度
-Dyarn.application.queue=test \ 指定yarn队列
-Djobmanager.memory.process.size=2048mb \ JM2~4G足够
-Dtaskmanager.memory.process.size=4096mb \ 单个TM2~8G足够
-Dtaskmanager.numberOfTaskSlots=2 \ 与容器核数1core:1slot或2core:1slot
-c com.atguigu.flink.tuning.UvDemo \
/opt/module/flink-1.13.1/myjar/flink-tuning-1.0-SNAPSHOT.jar

Flink是实时流处理,关键在于资源情况能不能抗住高峰时期每秒的数据量,通常用QPS/TPS来描述数据情况。

(以下略)。。。

本文是优极限大数据全套大数据教程之Flink调优的一部分文档,如需Flink或大数据齐全套课程资料请私信我或留言。

flink参数优化_flink环境搭建

flink调优

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/6304.html

(0)
上一篇 2022-12-14 22:56
下一篇 2022-12-14 22:56

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信