首页 > 解决方案 > 我们可以调用 SourceFunction#collectWithTimestamp 摄取时间中指定的时间戳吗

问题描述

SourceFunction 提供了一个方法: void collectWithTimestamp(T element, long timestamp);

从摄取时间的定义来看,源提供的时间戳看起来就像 event ingestion time,不确定我是否理解正确。

但是从这个方法的javadoc中,它说:

On {@link TimeCharacteristic#IngestionTime}, the timestamp is overwritten with the system's current time, to realize proper ingestion time semantics

我不太明白 javadoc 是什么意思

标签: apache-flink

解决方案


如果TimeCharacteristicIngestionTime,那么您提供的任何时间戳都collectWithTimestamp将被忽略并覆盖。

例如,如果您的源是 Kafka,并且您的事件具有 Kafka 代理提供的日志附加时间时间戳,那么您可能会在collectWithTimestamp. 但是,如果您随后将摄取时间指定为时间特征,那么这些事件时间时间戳将被覆盖。

所以“我们可以调用 SourceFunction#collectWithTimestamp 摄取时间中指定的时间戳”的答案是否定的。源可以自由地使用它喜欢的任何逻辑来生成这个时间戳,它很可能是一个适当的事件时间时间戳。

事件时间时间戳和摄取时间时间戳之间的一个主要区别是事件时间时间戳是可重现的——您可以运行相同的作业两次并获得完全相同的结果。摄取时间并非如此。


推荐阅读