一、数据反压
1.1 数据反压是啥
数据反压是在实时数据处理中,数据处理流的某个节点上游产生数据的速度大于该节点处理数据速度,导致数据堆积,从该节点向上游传递,一直到数据源,并降低数据源的摄入速度。导致数据反压出现的常见场景,比如, GC导致短时间数据积压,数据的波动带来的一段时间内需处理的数据量大增,甚至是checkpoint本身都可能造成反压。在窗口内做大量的外连情况,如redis/es等,redis连接过多会慢或直接报错。
若流程为A->B->C->D->E->F ,ABCD出现反压(即这里status为high),则表示E处理流程导致 D->C->B->A 相继变慢。
查看背压:当DAG的某个过程的背压状态为 low 或者 high 时,则说明下游的处理速度不及上游的输出速度。也就是说 下游的处理是整个任务的瓶颈所在,需要进行优化处理
1.2 Dashboard体现
点击Overview的Running Job List中的某个Job Name,再点击该job的某个算子,点击Backpressure查看,状态为HIGH时,则存在数据反压问题
二、数据倾斜
1.1 数据倾斜是啥
对于一个分部式的集群来说,理想的情况是每个节点负责处理一定量数据。如果数据分散度不够,导致大量的数据集中到了一台或者几台服务节点上,就是出现了数据倾斜。
1.2 Dashboard体现
点击Overview的Running Job List中的某个Job Name,接着点击某个算子,再点击SubTasks看每个节点处理数据量,如果处理不均匀则存在数据倾斜,会导致部分窗口数据处理缓慢。
由于并行度设为了1,所以图里只有一个node。
优化方式:
- 数据标记分流
- 窗口优化
- 在不影响逻辑的前提下,keyby对数据分流时选择较为均匀的数据。
三、消费滞后
1.1 消费滞后是啥
没有出现数据反压或数据倾斜,但是Flink的Watermark追不上实时时间,不能实时处理。
1.2 需单进程确认点
- flink读取的数据是否产生的及时。
- 窗口Aggregate处理是否存在死循环或较慢的点
(如:正则/redis/http等) - flink计算结果的输出处理慢。
(如:使用.disablechain.addsink()后再在dashboard中查看窗口和输出分别处理的速率)
可优化点:将窗口的处理逻辑优化的简单一些,将较长时间的处理放在数据处理部分或windowFunction部分。