代码之家  ›  专栏  ›  技术社区  ›  Luke De Feo

如何在apache beam/dataflow中跨重叠滑动窗口消除重复数据

  •  0
  • Luke De Feo  · 技术社区  · 7 年前

    我有以下要求:

    • 从发布子主题读取事件
    • 持续时间为30分钟,持续时间为1分钟
    • 在该窗口中,如果给定id的3个事件都匹配某个谓词,那么我需要在不同的发布子主题中引发一个事件
    • 当分组id出现第三个事件时,应立即引发该事件,因为这是为了检测欺诈行为。在一个窗格中,有许多ID有3个与谓词匹配的事件,因此我可能需要在每个窗格中发出多个事件

    我能够编写一个函数,该函数使用PCollection进行必要的分组、逻辑和过滤,并根据我的业务逻辑发出事件。

    问题:

    1. 由于滑动窗口重叠,输出PCollection包含重复项。我知道这是滑动窗口的预期行为,但我如何在保持相同的数据流管道的同时避免这种情况。我意识到我可以在外部系统中消除重复数据,但这只会增加我的系统的复杂性。
    2. 我还需要编写某种触发器,以便在窗口中每次达到我的条件时触发
    3. 数据流是否适合这种类型的实时检测场景

    非常感谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   jkff    7 年前
    1. 您可以重新输入输出 PCollection 进入全局窗口(使用常规 Window.into() )并使用 GroupByKey .
    2. 听起来你已经把感兴趣的事件作为 P收集 . 为了“为每项活动做点什么”,你只需要一个 ParDo.of(whatever action you want) 应用于此集合。触发器还可以做其他事情:它们控制当一个新值 V 到达特定密钥 K 在一个 GroupByKey<K, V> :是删除值,还是对其进行缓冲,还是传递缓冲 KV<K, Iterable<V>> 用于下游处理。
    3. 是:)