如何解决使用时间分散的事件在flink中管理水印的正确方法
我正在处理来自物联网设备的事件流。
这些事件具有第一级时间戳,由网络设置。他们还将在不同时间点采取的多项措施汇总在一起。例如:
- 网络时间 9:08
- 8:52 测量 M1
- 在 9:07 测量 M2
测量值每小时汇总一次,在这种情况下,M1 应在 8:00-9:00 的窗口中进行,而 M2 应在 9:00-10:00 的窗口中进行。
我想知道设计我的 flink 应用程序、管理这些时间戳和相关水印的正确方法是什么。根据我目前的理解:
- 我可能应该将所有与网络时间 (9:08) 相关的处理放在一个单独的 Flink 应用中。
- 让一个 Flink 应用程序在解包后处理这些度量(flap-mapped)。然后用
assignTimestampsAndWatermarks()
分配时间戳,对吗?考虑到同时采取的措施之间存在 1500 万的差价,我应该使用什么策略?
--
PS:不,我不能更换物联网设备
PPS:我打算使用 EMR,所以 flink 1.11,如果它对设计有任何影响。
解决方法
通常,对于乱序事件流,您希望使用有界顺序水印策略,其持续时间足够大以覆盖预期的乱序。所以在这种情况下至少需要 15 分钟。
如果您正在汇总每小时窗口,这应该是非常可行的——假设您可以容忍等到小时结束后 15 分钟才能看到任何结果。如果您可以对窗口结果进行增量聚合(通过 reduce
或 aggregate
),效率会更高。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。