DataStream#assignAscendingTimestamps的实际用途是什么

时间:2019-07-06 08:43:03

标签: apache-flink

DataStream#assignAscendingTimestamps的Javadoc

* Assigns timestamps to the elements in the data stream and periodically creates * watermarks to signal event time progress. * * This method is a shortcut for data streams where the element timestamp are known * to be monotonously ascending within each parallel stream. * In that case, the system can generate watermarks automatically and perfectly * by tracking the ascending timestamps.

此方法假定that the the element timestamp are known to be monotonously ascending within each parallel stream。但是实际上,几乎没有流可以保证事件时间戳按升序排列。

我想得出一个结论:永远不要使用此方法,但是我会问我是否错过了某些东西(例如何时使用它)

2 个答案:

答案 0 :(得分:2)

通常,我同意,它很少在实践中使用。以下是一个例外:如果将Kafka用作LogAppendTime的源,则按分区顺序排列时间戳。然后,您可以将Flink [1]中的按分区水印与AscendingTimestampExtractor一起使用,并且将具有非常理想的水印。

干杯

康斯坦丁

[1] https://ci.apache.org/projects/flink/flink-docs-release-1.8/dev/connectors/kafka.html#kafka-consumers-and-timestamp-extractionwatermark-emission

答案 1 :(得分:0)

阅读源代码DataStream#assignAscendingTimestamps后,它正在使用AscendingTimestampExtractor提取时间戳。

AscendingTimestampExtractor将保持迄今为止最大的事件时间戳。如果事件时间不正常,它将打印日志以警告违反单调递增的时间戳。

因此,我认为此类在实践中可能很方便,因为这种情况不允许懒惰(水印可能会不断增长)。