0

我们正在构建一个流处理管道,以使用 Flink v1.11 和事件时间特性来处理 Kinesis 消息。在定义源水印策略时,在官方文档中,我遇到了两种开箱即用的水印策略;forBoundedOutOfOrderness 和 forMonotonousTimestamps。但是根据我对上述内容的理解,我认为这些不适合我的用例。以下是我的用例的详细信息:

来自输入流的数据:(包含每分钟时间戳的数据)

{11:00, Data1}
{11:01, Data2}
{11:00, Data3}
{11:00, Data4}
{11:01, Data5}
...

现在,我想在时间戳为 11:00 的第一个事件到达后正好 20 秒处理包含 [Data1, Data3, Data4] 的 11:00-11:01 的窗口(翻滚事件时间:1 分钟)。同样,11:01-11:02 包含 [Data2, Data5] 的下一个窗口需要在第一个时间戳为 11:01 的事件进来后 20s 执行。这种水印策略在 Flink 中是否可行?

4

1 回答 1

0

这是实现这一点的一种方法:

在该onEvent方法中,跟踪迄今为止看到的最大时间戳。并且每当您更新此变量时,记录当前系统时间。

然后何时onPeriodicEmit被调用(默认情况下,每 200 毫秒调用一次),如果自当前最大时间戳更新以来已经 20 秒,则发出等于当前最大时间戳加 1 秒的水印。

于 2021-07-01T19:17:59.240 回答