假设有一个有限的DataStream(例如来自数据库源)和事件
a1, a2, ..., an
。如何将另外一个事件b
附加到此流来获取
a1, a2, ..., an, b
(即在所有原始事件之后输出添加的事件,保留原始排序)?
我知道在所有事件发生后,所有有限流都会发出MAX_WATERMARK
。那么,有没有办法“捕获”这个水印并输出其后的附加事件?
(不幸的是,.union()
原始DataStream与另一个DataStream组成的单个事件(时间戳设置为Long.MaxValue
)然后使用this answer排序联合流不起作用。)
也许我错过了一些东西,但似乎你可以简单地在远期将某个事件时间计时器设置为ProcessFunction,这样它只会在MAX_WATERMARK到达时触发。然后在onTimer方法中,如果currentWatermark是MAX_WATERMARK,则发出该特殊事件。
另一种方法可能是将原始数据源“包装”在另一个数据源中,当委托对象的run()
方法返回时,该数据源会发出最终元素。当然,您需要小心地调用所有委托方法。