迟发事件如何影响连接?

时间:2016-11-07 08:18:21

标签: google-cloud-platform google-cloud-dataflow

我一直在阅读有关Google DataFlow的一些信息。我有兴趣将它用于我收到的两个流之间的连接操作。两个流都包含一个共享ID,可用作连接键。

然而,在某些情况下,流B中的事件可能会在系统中接收,然后是流A中的事件。在这种情况下,在给定水印之后,假设我设置了类似.withAllowedLateness(3 days)的内容,DataFlow将如何处理这个?

它会重新加载旧事件以匹配它们吗?它不能加入这些吗?它是否会在内存中保留3天的数据,以防某些后期事件发生? (如果重新开始操作,它是否会错过连接,因为例如我改变了窗口大小?)

1 个答案:

答案 0 :(得分:1)

事件将使用Dataflow的状态机制(不一定在内存中)持续缓冲,直到允许的延迟,然后进行垃圾收集。

在幕后,项目将按(key, window)元组进行分组,因此如果您更改窗口和update the pipeline,我相信可能会错过某些加入结果,因为来自流{的较旧的缓冲项由于A的不同,{1}}将使用相同的密钥与流(key, window)中的新项目具有不同的B元组。

您可以使用TestStream在Beam direct runner的单元测试中对此进行试验。