如何在 apache beam / dataflow 中跨重叠滑动 windows 进行重复数据删除
How to dedupe across over-lapping sliding windows in apache beam / dataflow
我有以下需求:
- 从发布子主题中读取事件
- window 持续 30 分钟,周期 1 分钟
- 其中 window 如果给定 ID 的 3 个事件都匹配某个谓词,那么我需要在不同的发布子主题中引发一个事件
- 该事件应在分组 ID 出现第三个事件时立即引发,因为这是为了检测欺诈行为。在一个窗格中,有许多 ID 具有 3 个与我的谓词匹配的事件,因此我可能需要在每个窗格中发出多个事件
我能够编写一个使用 PCollection 的函数,根据我的业务逻辑执行必要的分组、逻辑和过滤并发出事件。
问题:
- 由于重叠滑动 windows,输出 PCollection 包含重复项。我知道这是滑动 windows 的预期行为,但是如何在保持相同数据流管道的同时避免这种情况。我意识到我可以在外部系统中进行重复数据删除,但这只会增加我的系统的复杂性。
- 我还需要编写某种触发器,每次在 window
中达到我的条件时都会触发
- dataflow适合这种实时检测场景吗
非常感谢
- 您可以将输出
PCollection
重新window 放入全局 window(使用常规 Window.into()
)并使用 GroupByKey
进行重复数据删除。
- 听起来您已经将感兴趣的事件作为
PCollection
返回。为了 "do something for each event",您只需要将 ParDo.of(whatever action you want)
应用于此集合。触发器做其他事情:它们控制当新值 V
到达 GroupByKey<K, V>
中的特定键 K
时发生的事情:是删除值,缓冲它,还是传递缓冲 KV<K, Iterable<V>>
用于下游处理。
- 是:)
我有以下需求:
- 从发布子主题中读取事件
- window 持续 30 分钟,周期 1 分钟
- 其中 window 如果给定 ID 的 3 个事件都匹配某个谓词,那么我需要在不同的发布子主题中引发一个事件
- 该事件应在分组 ID 出现第三个事件时立即引发,因为这是为了检测欺诈行为。在一个窗格中,有许多 ID 具有 3 个与我的谓词匹配的事件,因此我可能需要在每个窗格中发出多个事件
我能够编写一个使用 PCollection 的函数,根据我的业务逻辑执行必要的分组、逻辑和过滤并发出事件。
问题:
- 由于重叠滑动 windows,输出 PCollection 包含重复项。我知道这是滑动 windows 的预期行为,但是如何在保持相同数据流管道的同时避免这种情况。我意识到我可以在外部系统中进行重复数据删除,但这只会增加我的系统的复杂性。
- 我还需要编写某种触发器,每次在 window 中达到我的条件时都会触发
- dataflow适合这种实时检测场景吗
非常感谢
- 您可以将输出
PCollection
重新window 放入全局 window(使用常规Window.into()
)并使用GroupByKey
进行重复数据删除。 - 听起来您已经将感兴趣的事件作为
PCollection
返回。为了 "do something for each event",您只需要将ParDo.of(whatever action you want)
应用于此集合。触发器做其他事情:它们控制当新值V
到达GroupByKey<K, V>
中的特定键K
时发生的事情:是删除值,缓冲它,还是传递缓冲KV<K, Iterable<V>>
用于下游处理。 - 是:)