我有许多IoT设备以可变速率发送消息。使用这些消息,我需要为每个设备计算一些值,并在固定的事件时间窗口中每分钟发送一次。我有三分钟的时间来传递这些值,所以太迟到达的消息将被丢弃(速度超过正确性)。由于这个原因以及消息的变化率,我并不总是有足够的消息来计算值。我仍然可以通过使用固定窗口之前的30分钟和90秒(选择90秒,因为我想在3分钟的截止日期之内剩下一些时间来处理)之前的消息进行计算。
我正在使用Apache Beam通过GCP中的Dataflow运行器实现此流处理。我的问题是:我应该使用哪种窗口策略?
我已经考虑过大约30分钟的滑动窗口,每隔1分钟就会触发延迟,但是我可能无法在90秒钟之前访问消息。或者,我可以有1分钟的固定窗口,并有一些其他窗口作为sideinput。而且我猜想带有过滤功能的全局窗口也是可能的。
由于我是Beam,Dataflow,GCP和Java的新手,所以我很难看到选择任何这些开窗策略的后果。那么什么是好的开窗策略呢?