SourceFunction提供的方法如下:void collectWithTimestamp(T element, long timestamp);
从摄取时间的定义来看,源提供的时间戳看起来完全像事件ingestion time
,不确定我是否正确理解了。
但从这个方法的javadoc来看,它说:
On {@link TimeCharacteristic#IngestionTime}, the timestamp is overwritten with the system's current time, to realize proper ingestion time semantics
我不太明白javadoc是什么意思
如果TimeCharacteristic
是IngestionTime
,那么您在collectWithTimestamp
中提供的任何时间戳都将被忽略并覆盖。
例如,如果您的源是Kafka,并且您的事件具有由Kafka代理提供的日志附加时间戳,那么您可能在collectWithTimestamp
中使用这些时间戳。但是,如果将摄取时间指定为时间特征,那么这些事件时间戳将被覆盖。
因此,";我们可以调用SourceFunction#collectWithTimestamp摄取时间"中指定的时间戳吗;不是。源可以自由使用它喜欢的任何逻辑来生成这个时间戳,而且它很可能是一个合适的事件时间戳。
事件时间戳和摄取时间戳之间的一个主要区别是,事件时间戳是可复制的——您可以运行两次相同的作业,并获得完全相同的结果。摄入时间并非如此。