Google cloud dataflow Google数据流中的时间戳偏移

Google cloud dataflow Google数据流中的时间戳偏移,google-cloud-dataflow,Google Cloud Dataflow,我正在尝试运行一个管道,该管道读取pubsub主题并写入bigquery。时间戳是从主题消息中解析出来的。然而,我收到了一个关于允许时间戳偏移的错误,参考了下面复制的文档 getAllowedTimestampSkew公共持续时间getAllowedTimestampSkew() 返回允许的时间戳偏移持续时间,它是最大值 时间戳可以向后移动的持续时间 outputWithTimestamp(OutputT,org.joda.time.Instant)。这个 默认值为Duration.ZERO,在

我正在尝试运行一个管道,该管道读取pubsub主题并写入bigquery。时间戳是从主题消息中解析出来的。然而,我收到了一个关于允许时间戳偏移的错误,参考了下面复制的文档

getAllowedTimestampSkew公共持续时间getAllowedTimestampSkew() 返回允许的时间戳偏移持续时间,它是最大值 时间戳可以向后移动的持续时间 outputWithTimestamp(OutputT,org.joda.time.Instant)。这个 默认值为Duration.ZERO,在这种情况下,时间戳只能为 转向未来。对于无限倾斜,返回 持续时间。毫秒(长。最大值)


我想知道的是为什么默认允许的倾斜为零?数据流的全部目的不是为了处理延迟和无序的数据吗?数据何时转移到未来?

数据流使用水印处理延迟和无序数据,以跟踪输入完成的事件时间点。PubSub的水印是通过了解挂起的PubSub消息的时间戳来跟踪的。这取决于在每个PubSub消息和每个元素流经管道时,知道与它们关联的时间戳。输出带有时间戳倾斜的事件违反了这一知识,并可能导致不正确的行为,包括需要使用新的时间戳重新分配窗口,以使管道的其余部分正常工作和/或由于“太晚”而删除元素

这些博客更详细地发布和讨论了水印和处理事件时间的概念

在这种情况下,由于您使用的是PubSubIO,您可以利用它是一个内置源,并且具有跟踪PubSub队列中消息事件时间水印的特殊逻辑。在每个已发布的消息上放置一个时间戳标签,然后使用
与消息的事件时间关联。

不使用PubSubIO时,您有什么建议吗?时间戳信息取决于源代码——如果您正在编写自己的无限源代码,您可以在任何时间点指定水印是什么。