Flink性能优化篇
2023-06-13 17:10:47 0 举报
AI智能生成
登录查看完整内容
实战篇
作者其他创作
大纲/内容
1、开启火焰图,查看性能瓶颈点:rest.flamegraph.enabled : true
1、背压优化
2.1、开启MiniBatch
2.2、开启 LocalGlobal
2.3、开启Split Distinct
2、Flink SQL优化
3.1、状态读写比较频繁的场景,在状态前增加jvm级别缓存【guava】,降低状态的读操作
3.3、一个作业中,不建议声明超过3个状态,因为每个state共享一个blockcache,通过都有各自的index和布隆过滤器以及sstable,声明过多会导致状态访问磁盘的概率变大,从而降低性能
3.4、设计状态时,需要根据业务场景评估状态读写的频率a、看是否有机会减少状态的访问b、如果必须要访问状态,是否有机会将状态进行拆分,使用小状态满足大部分请求需求
3.5、开启增量ck:state.backend.incremental:true
3、状态优化
4.1、设置算子最大并行度,避免后续并行度不能扩展
4.2、算子并行度最好是最大并行度的,需要考虑每个算子拿到数据的分数,让数据更加均匀。例如最大并行度为512时,算子并行度可设置为171,不能设置为170
4、资源配置优化
5.1、在时效性允许的情况下,增加窗口+reduce对数据进行去重,降低数据下发量,降低数据库的压力
5.2、维表一般使用java定时加载的方式,针对实时性要求很高的场景,可缩短调度周期和透传查数据库的方式满足
5.3、聚合维度出现数据倾斜时,可以考虑:window+reduce+groupby操作实现局部聚合,降低状态的访问量和减少数据量级
5.4、代码抽象,包括环境声明、维表加载、状态读写、source和sink封装、核心处理逻辑的工厂类,从而降低代码的耦合
5.5、查询es数据量过大时,不要使用游标的方式,而是采用searchAfter的方式,可大大降低es集群内存压力游标方式是查询时刻的数据做一个快照在内存中
5.6、数据逻辑处理和数据下发时,需要考虑数据乱序问题
5.7、所有算子都需要设置uid和name
5、架构优化
6.1、如果出现network buffer不足或者通过ui界面发现该内存使用率很低时,可调整参数:taskmanager.memory.network.max
6.2、如果tm的full jc很严重时,则说明内存不足,需要不断的gc,则需要增加java内存,增加内存的方式有:增加tm总内存;降低其他内存使用
6.3、如果当前任务基本上无状态或状态很小,百M以下,可降低管理内存的大小。taskmanager.memory.managed.fraction=0.2/0.1
6.4 Direct Buffer Memory异常,则需要
6、内存参数优化
Flink性能优化篇
收藏
收藏
0 条评论
回复 删除
下一页