假设存在一个带有事件的有限DataStream(例如,来自数据库源)
a1, a2, ..., an
。 如何向此流附加一个事件b
以获得
a1, a2, ..., an, b
(即在所有原始事件之后输出添加的事件,并保留原始顺序)?
我知道所有有限流在所有事件之后都会发出MAX_WATERMARK
。那么,是否有办法“捕获”此水印并在其后输出其他事件?
(不幸的是,.union()
将原始DataStream与包含单个事件的另一个DataStream(时间戳设置为Long.MaxValue
)然后使用this answer对联合流进行排序不起作用。 )
答案 0 :(得分:1)
也许我丢失了一些东西,但是似乎您可以简单地将ProcessFunction的事件时间计时器设置为遥远的将来,以便仅在MAX_WATERMARK到达时才触发。然后在onTimer方法中,如果currentWatermark是MAX_WATERMARK,则发出该特殊事件。
答案 1 :(得分:0)
另一种方法可能是将原始数据源“包装”在另一个数据源中,当委托对象的run()
方法返回时,该数据源将发出一个最终元素。当然,您需要小心地调用所有委托方法。