flink中的水印和触发器有什么区别?

rseugnpd  于 2021-06-21  发布在  Flink
关注(0)|答案(2)|浏览(388)

我读到,“…排序运算符必须缓冲它接收到的所有元素。然后,当它接收到水印时,它可以对时间戳低于水印的所有元素进行排序,并按排序顺序发出它们。这是正确的,因为没有更多的元素可以到达的水印信号将与排序的元素混合…-https://cwiki.apache.org/confluence/display/flink/time+and+order+in+streams
因此,该水印似乎用作发送给以下操作符的信号,以便开始处理。我猜,这也是触发器的作用。这两者有什么区别?

rjee0c15

rjee0c151#

您可以将水印视为一种特殊的记录,它告诉操作员现在是什么(事件)时间。当操作员接收到水印时,它会将水印与其当前时间和从不同流分区接收的其他水印进行比较。根据比较结果,操作员提前自己的时钟。
一些操作符注册计时器(windows、基于时间的连接、自定义实现)。当操作员的时钟超过计时器注册的时间时,操作员触发计时器。
所以,水印和计时器是两码事。水印告诉操作员现在是什么时间,操作员在正确的时间点触发计时器。

ryoqjall

ryoqjall2#

水印可以被认为是一个Assert,事件时间流现在已经完成,直到一个特定的时间戳。当操作员处理水印时,它将触发任何相关的事件时间计时器。使用eventtimer的操作符是eventtimewindows和processfunctions。
触发器是windowapi的一部分,用于定义windows何时生成结果。eventtimetrigger围绕着一个事件时间计时器,当处理一个适当大的水印时调用该计时器,表示窗口现在已经完成。

相关问题