我正在处理来自物联网设备的事件流。
这些事件具有由网络设置的第一级时间戳。他们还将在不同时间点采取的几项措施组合在一起。例如:
- 网络时间9:08
- 在8:52测量M1
- 9:07测量M2
测量应每小时汇总一次,在这种情况下,M1应在8:00-9:00窗口进行,M2应在9:00-10:00窗口进行。
我想知道设计我的flink应用程序、管理这些时间戳和相关水印的正确方法是什么。根据我目前的理解:
- 我可能应该把所有与网络时间(9:08(相关的处理放在一个单独的Flink应用程序中
- 让Flink应用程序在它们被打开后处理度量(襟翼映射(。然后用
assignTimestampsAndWatermarks()
分配时间戳,对吗?考虑到同时采取的措施之间有1500万的差距,我应该使用什么策略
-
PS:不,我不能更改IOT设备
PPS:我计划使用EMR,所以如果它对设计有任何影响,请使用1.11。
通常,对于无序事件流,您希望使用有界有序水印策略,其持续时间足以覆盖预期的无序。在这种情况下,至少需要15分钟。
如果你正在聚合每小时窗口,这应该是非常可行的——假设你可以容忍在一小时结束后等待15分钟才能看到任何结果。如果您可以对窗口结果进行增量聚合(通过reduce
或aggregate
(,则效率会高得多。