我正在尝试理解键控数据流上的“滚动”缩减。
我有一个场景,我想忽略一些在特定时间到来的消息。例如。第一个事件 - >在事件之间 - >最后一个事件,我只想捕获第一个和最后一个事件,并希望在流中的事件之间跳过/删除。而且重要的是,它应该在一些关键的基础上发生。在我的情况下,当我申请密钥时,它不会受到影响。
答案 0 :(得分:0)
滚动减少可能不是你想要的。它拥有一个元素作为状态。无论何时收到新元素,它都会对存储的元素和新元素应用ReduceFunction
。发出函数的结果并更新状态。此运算符没有结束元素的概念,并且始终具有状态并等待下一个要处理的元素。
我认为有状态FlatMapFunction
或ProcessFunction
对您的用例来说是正确的方法。该函数将start元素存储为state并等待end元素到达。收到后,您将发出开始和结束元素并清理状态。
整个程序可能如下所示:
val stream[Event] = ...
val startEnd[(Event, Event)] = stream
.keyBy(yourKey)
.flatMap(yourStatefulFunction)