延迟事件如何影响连接?

How do late events affect joins?

我已经阅读了一些关于 Google DataFlow 的资料。我有兴趣将它用于我收到的两个流之间的连接操作。两个流都包含可用作连接密钥的共享 ID。

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

它会重新加载旧事件以匹配它们吗?难道不能加入这些吗?它是否会在内存中保留 3 天的数据以防万一出现延迟事件? (如果是这样,如果我重新启动操作,它会错过连接吗?因为例如我更改了 window 大小?)

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

在幕后,项目将按 (key, window) 元组分组,因此如果您更改窗口和 update the pipeline,那么我相信可能会遗漏一些连接结果,因为来自由于 window.

中的差异,流 A 将具有与流 B 中具有相同键的较新项不同的 (key, window) 元组

您可以使用 TestStream.

在 Beam 直接运行器中的单元测试中对此进行试验