在时间分散的事件中管理 flink 水印的正确方法
Proper way to manage watermark in flink with event scattered in time
我正在处理来自物联网设备的事件流。
这些事件具有第一级时间戳,由网络设置。他们还将在不同时间点采取的多项措施整合在一起。例如:
- 网络时间9:08
- 在 8:52
处进行的测量 M1
- 在 9:07
处测量的 M2
测量值每小时聚合一次,在这种情况下,M1 应该进入 8:00-9:00 window,M2 进入 9:00-10: 00window.
我想知道设计我的 flink 应用程序、管理这些时间戳和相关水印的正确方法是什么。据我目前的理解:
- 我应该将所有与网络时间相关的处理(9:08)放在一个单独的 Flink 应用程序中。
- 有一个 Flink 应用程序在解包(flap-mapped)后处理这些措施。然后用
assignTimestampsAndWatermarks()
分配时间戳,正确吗?考虑到同时采取的措施之间存在 1500 万的价差,我应该使用什么策略?
--
PS: 不行,我无法更改 IOT 设备
PPS: 打算用EMR,所以flink 1.11,如果对设计有影响
通常,对于乱序事件流,您希望使用持续时间足以覆盖预期乱序的有界有序水印策略。所以至少 15 分钟,在这种情况下。
如果您每小时汇总一次windows,这应该是非常可行的——假设您可以忍受在一小时结束后等待 15 分钟才能看到任何结果。如果您可以对 window 结果进行增量聚合(通过 reduce
或 aggregate
),效率会高得多。
我正在处理来自物联网设备的事件流。
这些事件具有第一级时间戳,由网络设置。他们还将在不同时间点采取的多项措施整合在一起。例如:
- 网络时间9:08
- 在 8:52 处进行的测量 M1
- 在 9:07 处测量的 M2
测量值每小时聚合一次,在这种情况下,M1 应该进入 8:00-9:00 window,M2 进入 9:00-10: 00window.
我想知道设计我的 flink 应用程序、管理这些时间戳和相关水印的正确方法是什么。据我目前的理解:
- 我应该将所有与网络时间相关的处理(9:08)放在一个单独的 Flink 应用程序中。
- 有一个 Flink 应用程序在解包(flap-mapped)后处理这些措施。然后用
assignTimestampsAndWatermarks()
分配时间戳,正确吗?考虑到同时采取的措施之间存在 1500 万的价差,我应该使用什么策略?
--
PS: 不行,我无法更改 IOT 设备
PPS: 打算用EMR,所以flink 1.11,如果对设计有影响
通常,对于乱序事件流,您希望使用持续时间足以覆盖预期乱序的有界有序水印策略。所以至少 15 分钟,在这种情况下。
如果您每小时汇总一次windows,这应该是非常可行的——假设您可以忍受在一小时结束后等待 15 分钟才能看到任何结果。如果您可以对 window 结果进行增量聚合(通过 reduce
或 aggregate
),效率会高得多。