流失计算中的windows机制|青训营笔记

83 阅读2分钟

这是我参与【第四届青训营】笔记创造活动的第四天。 Flink 运行时角色: Task模型 ,Subtask概念,Operator概念,Shuffle方式 SQL : Aggregate; UDAF (User defined aggregate function); TVF (Table valued functions); Window Aggregate function (TUMBLE/HOP/SESSION);

Watermark: 时间属性:处理时间,事件时间 Watermark generator; watermark传递; Idle source;

Watermark

这部分会对 Watermark 的概念、产生、传递以及典型的一些生产实践中的遇到的问题进行依次讲解。

Watermark定义:当前系统认为的事件时间所在的真实时间。

Watermark产生:一般是从数据的事件时间来产生,产生策略可以灵活多样,最常见的包括使用当前事件时间的时间减去一个固定的delay,来表示可以可以容忍多长时间的乱序。

Watermark传递:这个类似于上节课中介绍的Checkpoint的制作过程,传递就类似于Checkpoint的barrier,上下游task之间有数据传输关系的,上游就会将watermark传递给下游;下游收到多个上游传递过来的watermark后,默认会取其中最小值来作为自身的watermark,同时它也会将自己watermark传递给它的下游。经过整个传递过程,最终系统中每一个计算单元就都会实时的知道自身当前的watermark是多少。

增量计算 VS 全量计算

  • 增量计算:每条数据到来后,直接参与计算(但是还不需要输出结果)
  • 全量计算:每条数据到来后,先放到一个buffer中,这个buffer会存储到状态里,直到窗口触发输出的时候,才把所有数据拿出来统一进行计算

迟到数据处理

根据上面说到的watermark原理,watermark驱动某个窗口触发输出之后,这个窗口如果后面又来了数据,那这种情况就属于是迟到的数据了。(注意,不是数据的时间晚于watermark就算是迟到,而是它所属的窗口已经被触发了,才算迟到)。

对于迟到的数据,我们现在有两种处理方式:

  1. 使用side output方式,把迟到的数据转变成一个单独的流,再由用户自己来决定如何处理这部分数据
  2. 直接drop掉

注意:side output只有在DataStream的窗口中才可以用,在SQL中目前还没有这种语义,所以暂时只有drop这一个策略。

Window 高级优化

以下说的所有的高级优化,都只限于在SQL中的window中才有。在DataStream中,用户需要自己通过代码来实现类似的能力。