我读到,“ ..排序运算符必须缓冲它接收到的所有元素。然后,当它接收到水印时,它可以对时间戳低于水印的所有元素进行排序,并按排序顺序发出它们。这是正确的,因为水印表明不会再有更多元素会与已排序的元素混合在一起……”-https://cwiki.apache.org/confluence/display/FLINK/Time+and+Order+in+Streams
因此,似乎水印可以作为以下操作者的信号,以开始处理。我想,这也是触发器的作用。两者有什么区别?
答案 0 :(得分:1)
您可以将水印视为特殊记录,告诉操作员现在是什么时间。当操作员接收到水印时,它将水印与其当前时间以及从不同流分区接收到的其他水印进行比较。根据比较,操作员可以自己调整时钟。
一些操作员注册计时器(窗口,基于时间的联接,自定义实现)。当操作者的时钟经过计时器的注册时间时,操作者将触发计时器。
因此,水印和计时器是两回事。水印告诉操作员现在几点了,操作员会在正确的时间点触发计时器。
答案 1 :(得分:0)
水印可以被认为是一个事件时间流现在已经完成到一个特定的时间戳的断言。当操作员处理水印时,它将触发任何相关事件时间计时器。使用EventTimeTimers的运算符是EventTimeWindows和ProcessFunctions。
触发器是窗口API的一部分,用于定义Windows何时产生结果。 EventTimeTrigger环绕了一个事件时间计时器,该计时器在处理适当大的水印时被调用,指示窗口现在已完成。