千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  应聘面试  >  大数据面试题  > 怎么提高Flink的执行性能?(代码方面)

怎么提高Flink的执行性能?(代码方面)

来源:千锋教育
发布人:wjy
时间: 2022-09-02 15:41:00 1662104460

- 通用的优化方式

1. 尽早fliter掉一些不需要的数据以及避免一些不必要的序列化。

2. 避免使用深层嵌套数据类型。

3. 对于数据倾斜使用调整并行度或者双层聚合的方式。

4. 一些基数较少的并且本身较长维度可以采用数据字典的方式减少网络传输及内存占用、gc开销。

怎么提高Flink的执行性能?(代码方面)

- 数据类型和序列化 Flink支持java、scala基本数据类型,以及java Tuples、scala Case Class、Flink Value,对于这些数据类型,flink会采用自身的序列化反序列化器去做序列化操作,对于其他数据类型,flink会采用kyro方式序列化,kyro序列化方式效率会比flink自带的方式低很多。因此在数据序列化方面我们可以做如下工作

1. 尝试使用transient修饰不需要序列化的变量,或者修饰你可以在下游通过其他方式获取到变量,这个可以减少序列化流程和网络传输(但可能带来更多的内存占用用和gc消耗) 

2. 对于一些特殊的数据你可以尝试重写writeObject() 和 readObject() 来自己控制一些序列化方式,如果更高效的话

3. 如果使用了lambda或者泛型的话,显式的指定类型信息让flink类型提取系统识别到以提升性能。

- 多组相同keyby可使用DataStreamUtils在多组keyby的场景可以采用DataStreamUtils.reinterpretAsKeyedStream的方式避免多次shuffle操作 - 尽量减少状态的大小

1. 设置合适的state TTL, 清洗过期状态,避免状态无限增大。

2. 减少状态字段数, 比如使用aggreteFunction 做窗口聚合时,可以只将要聚合的信息放入状态,其他keyBy字段以及窗口信息,可以通过processWindowFunction的方式获取,这样就是 aggregateFunction + ProcessWindowFunction,agg函数获取聚合信息,输出的结果到processwindowFunction中取获取窗口信息。

3. checkpoint频率不宜过高,超时时间不要太长,可以异步化的地方尽量异步化

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT