1、 性能定位
1. 看背压 前面都没反压,第一个出现反压的算子或者前面都是反压,第一个不是反压的算子
背压要增大并发度,或者优化程序;
2. 看checkoint时长 checkpoint的时长在一定程度上可以影响job的整体吞吐
数据量很大,适当增大ck的间隔
3. 查看关键指标 通过延迟与吞吐指标可以对任务的性能进行精准的判断
4. 资源利用率 我们进行优化的最终目的是提供资源的利用率。
TaskManager的资源利用率低,降低TaskManager的内存配置;保持资源利用率在70%-90%
常见的性能问题如下:
-
JSON序列化与反序列化
常出现在source和sink任务上,在指标上没有体现,容易被忽略
-
Map和set的Hash冲突
由于HashMap,HashSet等随着负载因子增高,引起的插入和查询性能下降。
-
数据倾斜
数据倾斜会导致其中一个或者多个subtask处理的数据量远大于其他节点,造成局部数据延迟。
-
和低速系统的交互
在实时系统进行高速数据处理时,当涉及到与外部低俗的系统(如Mysql,Hbase等)进行数据交互时。
-
频繁的GC
因内存或者内存比例分配不合理导致频繁GC, 甚至是TaskManager失联
-
大窗口
窗口size大,数据量大,或者是滑动窗口size和step的比值比较大,如size=10minmatch, step=1。