Google cloud dataflow 数据流覆盖处理时间

Google cloud dataflow 数据流覆盖处理时间,google-cloud-dataflow,Google Cloud Dataflow,是否有方法覆盖数据流中的处理时间(而不是事件时间) 我试图解释失败场景,以及如何重新计算管道的输出 假设我有一个管道,只计算接收到的事件,固定窗口为1小时,允许延迟2小时。假设我对窗口[t0,t0+1h]感兴趣,并假设我有: 事件A,事件时间=t0+10m,处理时间=t0+30m 事件B,事件时间=t0+10m,处理时间=t0+90m 然后对事件A进行计数,并丢弃事件B 现在,假设几天后我在代码中发现了一个bug,我想重新运行管道来重新计算过去同一个窗口[t0,t0+1h]中的事件。 如果处

是否有方法覆盖数据流中的处理时间(而不是事件时间)

我试图解释失败场景,以及如何重新计算管道的输出

假设我有一个管道,只计算接收到的事件,固定窗口为1小时,允许延迟2小时。假设我对窗口[t0,t0+1h]感兴趣,并假设我有:

  • 事件A,事件时间=t0+10m,处理时间=t0+30m
  • 事件B,事件时间=t0+10m,处理时间=t0+90m
然后对事件A进行计数,并丢弃事件B

现在,假设几天后我在代码中发现了一个bug,我想重新运行管道来重新计算过去同一个窗口[t0,t0+1h]中的事件。 如果处理时间现在=t0+几天,则将丢弃所有事件

如果我忽略了允许的延迟(假设无限),那么事件A和B都被计算在内


通过重写处理时间(假设我第一次存储它)我可以确保事件A被计数,而事件B不被计数。有没有办法做到这一点?谢谢!

处理时间是元素到达系统进行处理的时间。水印跟踪我们在输入流中相对于元素事件时间的位置

水印通常只是一种启发式方法,因此,当出现错误且输入的元素比预期的要旧时,这些元素将被标记为延迟。水印可能会延迟处理时间,因此元素可能会延迟到达,但仍然不会被标记为延迟。例如,如果用户正在玩手机游戏,则水印将被标记为延迟可能会针对导致多个延迟事件的大型网络减速进行调整。在这种情况下,任何元素实际上都不会被视为延迟。但水印不会针对偶尔在脱机模式下玩游戏的用户进行调整,因此这可能会导致数据延迟。有关水印和数据流模型的有用背景信息,请参阅这些文章:及

如果一个无限源支持重播过去的事件,那么系统可能会在第二次时获得更好的水印,因此第一次标记得晚的内容不太可能仍然标记得晚


我不太确定您想保证什么,但您可以让管道读取输入,然后编写一份数据副本,其中包括事件时间、处理时间以及元素是否被视为延迟。例如,将大量信息写入BigQuery以演示其工作原理。如果您需要为了精确地重新处理它,您可以运行一个批处理管道,从副本读取数据并进行回填。(这是统一的批处理+流式编程模型的好处!)Processing time是元素到达系统进行处理的时间。水印相对于元素的事件时间跟踪我们在输入流中的位置

水印通常只是一种启发式方法,因此,当出现错误且输入的元素比预期的要旧时,这些元素将被标记为延迟。水印可能会延迟处理时间,因此元素可能会延迟到达,但仍然不会被标记为延迟。例如,如果用户正在玩手机游戏,则水印将被标记为延迟可能会针对导致多个延迟事件的大型网络减速进行调整。在这种情况下,任何元素实际上都不会被视为延迟。但水印不会针对偶尔在脱机模式下玩游戏的用户进行调整,因此这可能会导致数据延迟。有关水印和数据流模型的有用背景信息,请参阅这些文章:及

如果一个无限源支持重播过去的事件,那么系统可能会在第二次时获得更好的水印,因此第一次标记得晚的内容不太可能仍然标记得晚


我不太确定您想保证什么,但您可以让管道读取输入,然后编写一份数据副本,其中包括事件时间、处理时间以及元素是否被视为延迟。例如,将大量信息写入BigQuery以演示其工作原理。如果您需要为了精确地重新处理它,您可以运行一个批处理管道,从副本读取数据并进行回填。(这是统一的批处理+流式编程模型的好处!)

非常感谢Frances,我读了博客文章,这就是困惑的根源。TriggerExample真的澄清了很多。非常感谢Frances,我读了博客文章,这就是困惑的根源。TriggerExample真的澄清了很多。