“关键数据流的滚动缩减是什么意思?” DataStream减少功能

时间:2017-06-21 07:35:37

标签: apache-flink

我正在尝试理解键控数据流上的“滚动”缩减。

我有一个场景,我想忽略一些在特定时间到来的消息。例如。第一个事件 - >在事件之间 - >最后一个事件,我只想捕获第一个和最后一个事件,并希望在流中的事件之间跳过/删除。而且重要的是,它应该在一些关键的基础上发生。在我的情况下,当我申请密钥时,它不会受到影响。

1 个答案:

答案 0 :(得分:0)

滚动减少可能不是你想要的。它拥有一个元素作为状态。无论何时收到新元素,它都会对存储的元素和新元素应用ReduceFunction。发出函数的结果并更新状态。此运算符没有结束元素的概念,并且始终具有状态并等待下一个要处理的元素。

我认为有状态FlatMapFunctionProcessFunction对您的用例来说是正确的方法。该函数将start元素存储为state并等待end元素到达。收到后,您将发出开始和结束元素并清理状态。

整个程序可能如下所示:

val stream[Event] = ...
val startEnd[(Event, Event)] = stream
  .keyBy(yourKey)
  .flatMap(yourStatefulFunction)