Google cloud dataflow 实时流水线反馈回路

Google cloud dataflow 实时流水线反馈回路,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我有一个具有潜在损坏/恶意数据的数据集。数据是有时间戳的。我用启发式函数对数据进行评级。经过一段时间后,我知道所有带有某些ID的新数据项都需要丢弃,它们代表了数据的很大一部分(高达40%) 现在我有两个批处理管道: 第一个只是在数据上运行评级 第二种方法首先过滤出损坏的数据并运行分析 我想从批处理模式(比如每天运行)切换到在线处理模式(希望延迟

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

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

  • 第一个只是在数据上运行评级
  • 第二种方法首先过滤出损坏的数据并运行分析
  • 我想从批处理模式(比如每天运行)切换到在线处理模式(希望延迟<10分钟)

    第二个管道使用一个全局窗口,使处理变得容易。当检测到损坏的数据密钥时,所有其他记录都将被丢弃(使用前几天丢弃的密钥作为预筛选也很容易)。此外,由于在处理给定密钥的所有历史数据期间都是可用的,因此更容易对输出数据做出决策

    主要问题是:我可以在数据流DAG中创建一个循环吗?比方说,我想累积我处理的每个会话窗口的质量速率,如果速率之和超过X,管道早期的一些过滤函数应该过滤掉恶意密钥

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

    我知道DAG的定义是不可能有循环的,但是没有循环怎么能达到同样的效果呢


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

    Beam编程模型中的侧输入

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

    事实上,这是(第2页)中的主要示例之一,Dataflow的streaming runner就是基于此的。

    一个相关问题: