19.Flink中的迟到数据
在实际使用中,水位线的估计并不好选择,总是会有元素迟到,故我们需要考虑迟到的数据如何计算.
Flink提供了不同的选项来应对迟到事件
1. 简单丢弃
2. 重定向到单独的处理流
3. 根据迟到事件更新并计算出结果
简单的丢失是最简单的方式,也是默认的行为
重定向迟到事件,其实就是进行一个重定向,然后方便后续处理或者直接写出
使用的方式很简单
这样我们设置了副输出
除了这种方式,还可以利用处理函数来手动的将过期数据重定向输出到侧输出中
以及最后的基于迟到事件进行更新并计算出结果
这种方式需要能够保存对应的状态,如果丢失了之前事件的状态,那么对应的结果也无法更新了,迟到事件只能被丢弃或者被重定向.
除了算子中保存状态,下游算子或者外部系统也要支持,也就是外部系统需要支持幂等性
除此外,窗口算子API提供了一个方法,提供了显式声明支持迟到的元素
在使用事件时间窗口的时候,可以指定一个名为延迟容忍度字段,配置了这个属性的窗口算子在水位线超过窗口的结束时间戳之后不会立刻删除窗口,而是先保留一定时间段的状态.方便迟到数据的处理.使用起来含简单,使用allowedLateness()方法来制定延迟容忍度