0

我们有来自视频流客户端的事件流,大约 1k-3k/s,主要是心跳,我们将其聚合到会话中。我们使用具有 10 分钟间隔持续时间和默认触发的会话窗口(即不允许提前触发和不允许延迟)。

我们观察到的是(1)不稳定和突发的会话发射,以及(2)不稳定和“跳跃”的水印,有时可以追溯到 2 周的历史。

我们认为这可能与具有本地时钟偏差的客户端子集相关联,从而影响事件时间。

这意味着水印不会将来自“坏”客户端的事件标记为延迟,而是根据这些新(旧)时间戳进行自我调整,从而有效地阻止最近结束的会话的发射。并且只有在某个预定义的时间内没有观察到不良事件时,水印才会提前到实时并且可以发出最近的会话。

这是一个合理的假设吗?这是上述条件下的预期行为吗?鉴于我们的假设是正确的,推荐的解决方案是什么?

4

1 回答 1

0

你的假设听起来很合理。Pub/Sub 水印跟踪将忽略过去偶尔出现的数据,但如果这种情况发生得足够普遍,它将按照您的描述运行。一种可能的解决方案是使用 Cloud Pub/Sub 中收到记录的时间戳,而不是基于本地倾斜时钟的时间戳。您可以通过省略对读取转换的 .timestampLabel() 调用来做到这一点。

于 2017-01-19T18:39:07.757 回答