在时间分散的事件中管理 flink 水印的正确方法

Proper way to manage watermark in flink with event scattered in time

我正在处理来自物联网设备的事件流。

这些事件具有第一级时间戳,由网络设置。他们还将在不同时间点采取的多项措施整合在一起。例如:

测量值每小时聚合一次,在这种情况下,M1 应该进入 8:00-9:00 window,M2 进入 9:00-10: 00window.

我想知道设计我的 flink 应用程序、管理这些时间戳和相关水印的正确方法是什么。据我目前的理解:

--

PS: 不行,我无法更改 IOT 设备

PPS: 打算用EMR,所以flink 1.11,如果对设计有影响

通常,对于乱序事件流,您希望使用持续时间足以覆盖预期乱序的有界有序水印策略。所以至少 15 分钟,在这种情况下。

如果您每小时汇总一次windows,这应该是非常可行的——假设您可以忍受在一小时结束后等待 15 分钟才能看到任何结果。如果您可以对 window 结果进行增量聚合(通过 reduceaggregate),效率会高得多。