如何在Apache Beam / dataflow中的超盖滑动窗口中删除



我有以下要求:

  • 阅读酒吧子主题的事件
  • 以30分钟的持续时间窗口1分钟
  • 在该窗口中,如果给定ID的3个事件全部匹配某些谓词,那么我需要在其他酒吧sub主题中提出一个事件
  • 应该在分组ID的第三次事件一旦提出事件,因为这是用于检测欺诈行为。在一个窗格中,有许多ID有3个与我的谓词相匹配的事件,因此我可能需要发出每个窗格的多个事件

我能够编写一个消耗pcollection的函数,根据我的业务逻辑进行必要的分组,逻辑和过滤和发射事件。

问题:

  1. 由于重叠的滑动窗口,输出PCollection包含重复。我知道这是滑动窗口的预期行为,但是在同一数据流管线中,我该如何避免这种行为。我意识到我可以在外部系统中删除,但这只是增加了我的系统的复杂性。
  2. 我还需要编写某种触发器,每次在窗口中达到我的病情时
  3. 是适用于这种实时检测方案的数据流

非常感谢

  1. 您可以将输出PCollection倒入全局窗口(使用常规Window.into()),并使用GroupByKey
  2. 听起来您已经返回了PCollection感兴趣的事件。为了"为每个事件做某事",您需要的只是应用于此集合的ParDo.of(whatever action you want)。触发器做其他事情:他们控制新值V到达GroupByKey<K, V>中的特定键K时会发生什么:是删除值还是缓冲它,或通过缓冲 KV<K, Iterable<V>>传递以进行下游处理。
  3. 是:)

最新更新