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的意思
答案 0 :(得分:2)
如果os.popen('wmic csproduct get UUID').read()
为TimeCharacteristic
,则您在IngestionTime
中提供的任何时间戳都将被忽略并覆盖。
例如,如果您的来源是Kafka,并且您的事件具有由Kafka经纪人提供的日志附加时间时间戳,则您可能正在collectWithTimestamp
中使用这些时间戳。但是,如果您随后将摄取时间指定为时间特征,则这些事件时间时间戳将被覆盖。
因此,“我们可以调用SourceFunction#collectWithTimestamp摄取时间中指定的时间戳”的答案是否定的。源可以自由使用它喜欢的任何逻辑来生成此时间戳,并且很可能是适当的事件时间时间戳。
事件时间时间戳和摄取时间时间戳之间的主要区别在于事件时间时间戳是可重现的-您可以两次运行相同的作业并获得完全相同的结果。摄取时间并非如此。