如果我将时间特征设置为IngestionTime,是否需要设置assignTimestampsAndWatermarks?
假设我将流执行环境的时间特性设置为摄入时间,如下所示
streamExecutionEnvironment.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime);
我需要打datastream.assignTimestampsAndWatermarks(AscendingTimestampExtractor)
吗?
我认为只有当时间特性是事件时间时,datastream.assignTimestampsAndWatermarks
才是强制性的。不如果没有,我想知道如何在分布式环境中设置AscendingTimestampExtractor
?有没有办法在没有任何分布式锁的情况下添加单调递增的long(AscendingTimestampExtractor(?
否,使用摄取时间时无需调用assignTimestampsAndWatermarks
。随着摄入时间的推移,Flink会自动分配时间戳和水印。
此外,在进行水印时,永远不需要担心分布式锁定。每个本地实例基于其对本地流的了解在本地分配水印。对于AscendingTimestampExtractor
,时间戳在每个实例中单调增加就足够了。