- watermark是全局的值,但是每个operator维护一个当前的watermark,多流的时候取最小。
- watermark》= window end,而且window内有数据才fire。
https://ci.apache.org/projects/flink/flink-docs-stable/dev/event_timestamps_watermarks.html#watermark-strategies-and-the-kafka-connector
watermark会在operator触发了windows,产生了的数据都emit出去之后,才会接着emit这个watermark。
要理解watermark是全局的话。
下面的那个图一定要看懂,黄色小块是当前operator的watermark。在跑的那些白色是数据。
Source(1)的两个流wm只取小的。Source(2)同理。
Window(1)14,29取小的,所以右上角也是14.
Map(2)17的watermark刚刚被处理过,所以emit出去两个下游W(17)这个watermark。
watermark并不会阻碍数据流动,但是在window function里面会积累到trigger这个windows。
https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/operators/windows.html#default-triggers-of-windowassigners
default的assigner是依赖这个wm来trigger windows,但是还有其他乱七八糟的trigger方式。可以多看看。
网友评论