Timely Stream Processing只是在Stateful Stream Processing上增加了时间的处理,可用于做特定时间段内的聚合操作,或时间序列分析等。
Event Time & Processing Time
Processing Time是operator开始处理数据的时间,通常是系统时间。使用processing time会达到最低延迟,但数据乱序时可能会导致结果不准确。
Event Time是事件发生的时间。使用event time时必须指定如何生成watermark.
Event Time and Watermarks
watermark也是data stream中的一条记录,带着一个时间戳t,表示所有在t之前发生的事件都已经到达,operator可以进行计算了。在乱序的stream中,watermark是必须的,否则计算过程永远不会被触发。
Watermarks in Parallel Streams
watermark由source function产生,而每个并行的source function是独立生成watermark的。operator收到watermark后更新自己的event time,并向下游operator发出一个新的watermark. 如果一个operator有多个input stream, 它会取较小的watermark的时间作为自己的event time.(因为如果以较大的为准会导致另一个stream中的数据丢失)
Lateness
如果一个event time为t' < t的事件在watermark之后到达,则称它迟到了。迟到的数据有几种处理方法:
- 丢弃
- 统一输出到一个output stream
- 设置一个迟到等待期,将迟到等待期内到达的数据更新到计算结果中。
Windowing
对一个无界流做聚合操作是不现实的,如你不能求一个无界流数据的和,所以我们需要设置一个窗口,仅对窗口内的数据做聚合操作。