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