“键控数据流上的滚动reduce”datastream reduce函数的含义是什么

pnwntuvh  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(280)

我试图理解一个键控数据流上的“滚动”reduce。
我有一个场景,我想忽略一些在特定时间到达的消息。e、 g.第一个事件->中间事件->最后一个事件,我只想捕获第一个和最后一个事件,并想从流中跳过/删除中间事件。重要的是,它应该建立在一些关键的基础上。。在我的情况下,它没有发生时,我申请的关键。

p4rjhz4m

p4rjhz4m1#

滚动减少可能不是你要找的。它将元素作为状态保存。每当接收到新元素时,它应用 ReduceFunction 关于存储和新元素。函数的结果被发出并更新状态。这个操作符没有结束元素的概念,总是有状态并等待下一个元素处理。
我认为一个有状态的 FlatMapFunction 或者 ProcessFunction 将是您的用例的正确方法。函数将开始元素存储为state,并等待结束元素到达。一旦接收到它,就发出start和end元素并清除状态。
整个程序可以如下所示:

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

相关问题