我们有一系列事件,大约1k-3k / s,主要是心跳,来自视频流客户端,我们将其聚合到会话中。我们使用一个会话窗口,其间隔时间为10分钟,默认触发(即没有早期触发器,也不允许延迟)。
我们观察到的是(1)会话的不规则和突发性发射,以及(2)不稳定的"跳跃"水印,有时在历史上可以追溯到2周。
我们认为这可能与具有本地时钟偏差的客户端子集相关联,从而影响事件时间。
这意味着不是标记来自"坏"客户为时已晚,水印根据这些新的(旧)时间戳自行调整,有效地阻止了最近结束的会话的排放。并且只有在预定义的时间内没有观察到任何不良事件时,水印才会提前到实时,并且可以发出最近的会话。
这是一个合理的假设吗? 这是上述条件下的预期行为吗? 鉴于我们的假设是正确的,推荐的解决方案是什么?
答案 0 :(得分:0)
你的假设听起来合理。 Pub / Sub水印跟踪将忽略过去远处的偶然数据,但如果这种情况发生得非常普遍,它将按照您的描述运行。一种可能的解决方案是使用在Cloud Pub / Sub中接收记录的时间戳,而不是基于本地偏斜时钟的时间戳。您可以通过省略读取转换上的.timestampLabel()调用来实现此目的。