Apache Flink - 活动时间

问题描述 投票:0回答:1

我想为Apache flink中的事件创建一个事件时钟。我是按照以下方式做的

public class TimeStampAssigner implements AssignerWithPeriodicWatermarks<Tuple2<String, String>> {


    private final long maxOutOfOrderness = 0; // 3.5 

    private long currentMaxTimestamp;

    @Override
    public long extractTimestamp(Tuple2<String, String> element, long previousElementTimestamp) {

        currentMaxTimestamp = new  Date().getTime();

        return currentMaxTimestamp;
    }



    @Override
    public Watermark getCurrentWatermark() {

        return new Watermark(currentMaxTimestamp - maxOutOfOrderness);


    }

}

请检查上面的代码,并告诉我是否正确执行。在事件时间和水印分配之后,我想处理流程中的流,其中我将收集不同密钥的流数据10分钟。

apache-flink
1个回答
1
投票

不,这不是一个合适的实施。事件时间时间戳应该是确定性的(即,可再现的),并且它应该基于事件流中的数据。如果您打算使用Date()。getTime,那么您或多或少会使用处理时间。

通常,在执行事件时处理时,事件将具有时间戳字段,时间戳提取器将返回此字段的值。

您展示的实施将失去使用事件时间带来的大部分好处,例如重新处理历史数据以重现历史结果的能力。

© www.soinside.com 2019 - 2024. All rights reserved.