时间相关:
Watermark 水位线
- 水位线是插入到数据流中的一个标记,可以认为是一个特殊的数据。
- 水位线主要的内容是一个时间戳,用来表示当前事件时间的进展。
- 水位线是基于数据的时间戳生成的。
- 水位线的时间戳必须单调递增,以确保任务的事件时间时钟一直向前推进,进展。
- 水位线可以通过设置延迟,来保证正确处理乱序数据。
- 一个水位线 Watermark(t),表示在当前流中事件时间已经达到了时间戳 t,这代表 t之前的所有数据都到齐了,之后流中不会出现时间戳 t‘ ≤ t 的数据。
Watermark 多并行度下的生成、传递
生成:
- 间歇性更新(punctuated watermarks):
遇到新事件后更新
With punctuated watermarks, Flink calls checkAndGetWatermark() on each new event, i.e. right after calling assignWatermark(). An actual watermark is emitted only if checkAndGetWatermark() returns a non-null value which is greater than the last watermark.
来自stackoverflow回答
- 周期性更新
定期更新
With periodic watermarks, Flink calls getCurrentWatermark() at regular interval, independently of the stream of events.
设置周期性更新的时间
// 设置Watermar