The javadoc for the DataStream#assignAscendingTimestamps
* 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
.但实际上,几乎没有流可以保证事件时间戳是按升序排列的。
我想得出结论,永远不应该使用这种方法,但我会问我是否错过了什么(例如,何时使用它(
总的来说,我同意,它在实践中很少使用。例外情况如下:如果 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
在读取源代码DataStream#assignAscendingTimestamps
后,它正在使用AscendingTimestampExtractor
来提取时间戳。
AscendingTimestampExtractor
将保留迄今为止看到的最大事件时间戳。如果事件时间顺序不正确,它将打印日志以警告违反单调升序的时间戳。
所以,我认为对于不允许懒惰的情况,这个类在实践中可能很方便(水印可能会继续增长(。