Flink:将事件附加到有限DataStream的末尾

时间:2019-02-14 09:44:52

标签: apache-flink flink-streaming

假设存在一个带有事件的有限DataStream(例如,来自数据库源)

  • a1, a2, ..., an

如何向此流附加一个事件b以获得

  • a1, a2, ..., an, b

(即在所有原始事件之后输出添加的事件,并保留原始顺序)?

我知道所有有限流在所有事件之后都会发出MAX_WATERMARK。那么,是否有办法“捕获”此水印并在其后输出其他事件?

(不幸的是,.union()将原始DataStream与包含单个事件的另一个DataStream(时间戳设置为Long.MaxValue)然后使用this answer对联合流进行排序不起作用。 )

2 个答案:

答案 0 :(得分:1)

也许我丢失了一些东西,但是似乎您可以简单地将ProcessFunction的事件时间计时器设置为遥远的将来,以便仅在MAX_WATERMARK到达时才触发。然后在onTimer方法中,如果currentWatermark是MAX_WATERMARK,则发出该特殊事件。

答案 1 :(得分:0)

另一种方法可能是将原始数据源“包装”在另一个数据源中,当委托对象的run()方法返回时,该数据源将发出一个最终元素。当然,您需要小心地调用所有委托方法。