Apache flink 如何使真正的滑动窗口忽略最近的事件?

Apache flink 如何使真正的滑动窗口忽略最近的事件?,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我试图构建一个类似于滑动窗口的窗口,并且: 统计事件,忽略自窗口结束到某个“延迟”的事件 每个事件只触发一次 [事件TS-延迟-持续时间,事件TS-延迟]中事件的输出计数 使用预聚合避免保存所有事件 窗口的参数为: 持续时间:窗口的持续时间 输出:要触发的事件的偏移量,从窗口末尾开始计数。类似于“幻灯片” 延迟:要忽略的事件的偏移量,从窗口末尾开始计数。基本上忽略事件,例如timestamp我可能在细节中有点迷失,但也许我看到了解决方案 似乎您可以使用一个自定义,在延迟之前和之后触发两次。

我试图构建一个类似于滑动窗口的窗口,并且:

  • 统计事件,忽略自窗口结束到某个“延迟”的事件
  • 每个事件只触发一次
  • [事件TS-延迟-持续时间,事件TS-延迟]中事件的输出计数
  • 使用预聚合避免保存所有事件
窗口的参数为:

  • 持续时间:窗口的持续时间
  • 输出:要触发的事件的偏移量,从窗口末尾开始计数。类似于“幻灯片”

  • 延迟:要忽略的事件的偏移量,从窗口末尾开始计数。基本上忽略事件,例如timestamp我可能在细节中有点迷失,但也许我看到了解决方案

    似乎您可以使用一个自定义,在延迟之前和之后触发两次。然后使用a和保持第一次触发的计数(然后再减去)


    考虑到这一切的复杂性,基于ProcessFunction和托管状态的解决方案可能更简单。

    感谢您的快速响应David!我还没试过,但我想它会管用的。我没有意识到您可以在
    WindowedStream\35; aggregate
    中同时使用
    ProcessWindowFunction
    WindowFunction
    。这两者有什么区别?显然,接口是不同的,但在运行时,它们有什么区别呢?更详细地讲:一个接口似乎通过InternalSingleValueProcessWindowFunction维护窗口的上下文,而另一个接口则没有,但这会带来成本吗?如果
    ProcessWindowFunction
    s看起来像一个超集,为什么我们需要
    WindowFunction
    s?ProcessWindowFunction是API最近添加的一个功能,实际上是WindowFunction的超集。WindowFunction可能有一天会被弃用。