我们从成千上万的用户中收集驾驶数据,每辆车都与IMEI(唯一代码)相关联。安装在这些车辆中的设备会每5秒发射一次GPS点。我的要求是针对给定的IMEI组装属于单个行程的所有GPS点并构造一个Trip对象。
我正在使用事件时间和会话窗口来检测行程的结束(10分钟未接收GPS坐标),以及另外15分钟的允许延迟以等待延迟事件。然后,水印前进到最新接收到的事件时间。假设这是针对IMEI = 100的情况。现在,如果我收到IMEI 1到99的数据,且该事件的时间晚于该水印,则所有这些数据都将被视为延迟并且将不被处理。
换句话说,如果某辆车的数据超前水印,则来自其他所有车辆的数据将被认为是较晚的,因为水印是全局的。
鉴于我的问题,有没有办法为不同的密钥实现不同的水印?如果不是直接可行,是否有某种方法可以模拟它以适合我的应用程序?
任何帮助将不胜感激!
答案 0 :(得分:2)
Flink至少目前还不支持每按键水印。
另一方面,Kafka用户支持按分区的水印。因此,如果您使用的是Kafka并且可以为每辆车提供一个分区,那可能是一个解决方案。
否则,您可以考虑使用Flink的低级API自行构建会话,而不是依赖会话窗口。但是,如果不能使用水印来触发事件时间计时器,那听起来就不那么简单了。