如何在apache beam / dataflow中重叠翻转滑动窗口

时间:2017-12-11 15:17:28

标签: google-cloud-dataflow apache-beam spotify-scio

我有以下要求:

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

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

问题:

  1. 由于滑动窗口重叠,输出PCollection包含重复项。我理解这是滑动窗口的预期行为,但是如何在同一数据流管道中避免这种情况。我意识到我可以在外部系统中重复数据删除,但这只会增加我系统的复杂性。
  2. 我还需要编写某种触发器,在窗口中达到条件时触发每次触发
  3. 数据流是否适合此类实时检测方案
  4. 非常感谢

1 个答案:

答案 0 :(得分:1)

  1. 您可以将输出PCollection重新显示到全局窗口中(使用常规Window.into())并使用GroupByKey进行重复数据删除。
  2. 听起来你已经将感兴趣的事件作为PCollection返回。为了对每个事件&#34;做一些事情,您只需要ParDo.of(whatever action you want)应用于此集合。触发器执行其他操作:它们控制当V中的特定键K到达新值GroupByKey<K, V>时发生的情况:是删除值还是缓冲它,或者通过缓冲KV<K, Iterable<V>>以进行下游处理。
  3. 是:)