设想:
我有来自传感器的事件流。事件可以是T-type或J-Type。
- T 类事件有事件发生的时间戳。
- J 型事件具有开始和结束时间戳。
根据 J-Type 事件的开始和结束时间戳,对时间范围内的所有 T-type 事件应用聚合逻辑并将结果写入 DB。
为此,我创建了一个自定义触发器,它在收到 J-Type 事件时触发。在我的自定义 ProcessWindowFunction 中,我正在执行聚合逻辑和时间检查。
但是,可能存在一种情况,即 T 型事件不在当前 J 型事件的时间范围内。在这种情况下,应该在清除当前窗口之前将 T 型事件推送到下一个窗口。
想到的解决方案:
在自定义窗口处理函数中,将未处理的 T 型事件推送到 Kinesis 流(源)中。(最坏情况解决方案)
使用 FIRE 代替 FIRE_AND_PURGE,以在整个运行时维护状态。使用元素迭代器删除已处理的元素。(不推荐,保持无限窗口)
想知道,是否有任何方法可以将未处理的事件直接推送回输入流(没有运动)。(重新排队)
或者
有什么方法可以在 keyBy 上下文中维护状态,以便我们对这些未处理的数据(之前或)与窗口元素一起执行计算。