实时管道反馈循环

时间:2016-05-19 13:00:15

标签: google-cloud-dataflow apache-beam

我有一个包含潜在损坏/恶意数据的数据集。数据带有时间戳。我用启发式函数对数据进行评级。经过一段时间后,我知道所有带有一些ID的新数据项都需要被丢弃,它们代表了很大一部分数据(高达40%)。

现在我有两个批处理管道:

  1. 首先只对数据进行评级。
  2. 第二个过滤掉损坏的数据并运行分析。
  3. 我想从批处理模式(例如,每天运行)切换到在线处理模式(希望延迟<10分钟)。

    第二个管道使用全局窗口,使处理变得容易。当检测到损坏的数据密钥时,简单地丢弃所有其他记录(也使用前几天丢弃的密钥,因为预过滤器很容易)。此外,在处理给定密钥的所有历史数据时,它可以更容易地对输出数据做出决策。

    主要问题是:我可以在Dataflow DAG中创建循环吗?假设我想累积给我处理的每个会话窗口的质量率,如果速率总和超过X,那么管道早期阶段的一些过滤函数应该过滤掉恶意密钥。

    我知道侧输入,我不知道它是否可以在运行时更改。

    我知道DAG根据定义不能有循环,但如果没有它会如何实现相同的结果呢?

    我想到的想法是使用侧输出将ID标记为恶意,并伪造无限的输出/输入。输出会将数据转储到某个存储器,输入会每小时加载一次并流式传输,以便加入。

1 个答案:

答案 0 :(得分:1)

Beam编程模型中的侧输入are windowed

所以你走的是正确的道路:将管道结构化为两部分似乎是合理的:1)计算恶意数据的检测模型,2)将模型作为侧输入,数据作为主要输入,并根据模型过滤数据。管道的第二部分将获得匹配窗口的模型,这似乎正是您想要的。

事实上,这是Millwheel paper(第2页)中的主要示例之一,Dataflow的流媒体播放器基于此示例。