watermark 我们从英文单词拆解翻译,就是水位线。既然是水位线,所以我觉得通过试管(化学实验器皿)来描述这个最合适不过了。
flink引入窗口机制是为了处理无序数据流入的问题,那么窗口什么时候触发呢,那么必须约定一个全局的时间点,这个时间点就是waterMark。
举例:我们往试管里面倒入水(偶尔是持续的偶尔是断断续续的)同时要观察试管里面水的读数并记录下来,并且规定每增加20ml的水做一次记录(即window大小为20ml)。由于水偶尔断断续续倒入,偶尔是连续倒入,为了避免水面滚动或者突然没水了影响读数的准确性(例如登记了500ml,但是实际倒入490ml的时候没水就会出现登记结果和实际水量不符),我们对试管不断的按固定大小的刻度做标记(watermark),每次只能对标记以下的水量进行记录登记(window)。想象一下,当连续倒入的时候记录的速度会赶不上倒入的速度,这时候会出现watermark是持续在水面下的,当水是断断续续倒入的时候,可能会出现watermark在水面上,这时候如果是按倒入水所在刻度作为watermark的依据时(所谓的event time模式),watermark必须暂停标记,直到水倒入超过watermark所在刻度。
好了,前面废话说的太多,直接上图: