如何在 apache beam / dataflow 中跨重叠滑动 windows 进行重复数据删除

How to dedupe across over-lapping sliding windows in apache beam / dataflow

我有以下需求:

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

问题:

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

非常感谢

  1. 您可以将输出 PCollection 重新window 放入全局 window(使用常规 Window.into())并使用 GroupByKey 进行重复数据删除。
  2. 听起来您已经将感兴趣的事件作为 PCollection 返回。为了 "do something for each event",您只需要将 ParDo.of(whatever action you want) 应用于此集合。触发器做其他事情:它们控制当新值 V 到达 GroupByKey<K, V> 中的特定键 K 时发生的事情:是删除值,缓冲它,还是传递缓冲 KV<K, Iterable<V>> 用于下游处理。
  3. 是:)