Flink 周期性水位线分配器 -6-3
周期性水位线分配器
定义: 指示系统以固定的机器时间间隔来发出水位线,并推动事件时间前进。
默认时间间隔为 200 毫秒
env.getConfig.setAutoWatermarkInterval(5000L)
每隔 5 秒会调用一次 getCurrentWatermark()方法,如果该放法返回值非空,且它的时间戳大于上一个水位线的时间戳,那么算子就会发出一股新的水位线,这项检查对于保证事件时间持续递增十分必要,一旦检查失败将会生成水位线。
通过跟踪至今为止所遇见的最大元素时间戳来生成水位线
定点水位线分配器
输入流中包含一些用于指示系统进度的特殊元组或标记,接收到特殊元素作为生成水位线
水位线、延迟及完整性问题
水位线可以用于平衡延迟和结果的完整性
水位线控制着执行某些计算前需要等待数据到达时间
根据收到的水位线算子会计算一个所有相关输入记录已经接收完毕的预期时间点。
现实中永远不会存在完美的水位线,因为总会有迟到的记录
水位线生成原则
尽可能的了解数据源、网络及分区等一切信息,以此来估计进度和输入记录的延迟上线
既然是估计,就可能不准确,导致迟到数据或无畏增加应用处理延迟
如果水位线过于宽松:导致产生结果延迟增大,导致状态大小随之增加,好处是在执行计算时你能确保全部相关数据都已经收集完毕。
生成水位线过于紧迫:水位线可能大于部分后来的数据时间戳,在所有数据到齐之前就已经触发计算,导致结果不完整,但是较低延迟,及时生成结果
对于批处理应用而言:所有数据都处于可用状态,而流处理是无限数据,因此延迟和完整性之间取舍是一个基本特点。
评论