我想为Apache flink中的事件创建一个事件时钟。我是按照以下方式做的
public class TimeStampAssigner implements AssignerWithPeriodicWatermarks> {
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分钟。
2000元阿里云代金券免费领取,2核4G云服务器仅799元/3年,新老用户都有优惠,立即抢购>>>
事件时间时间戳应该是确定性的(即可再现的),并且它应该基于事件流中的数据。如果您打算使用Date()。getTime,那么您或多或少会使用处理时间。
通常,在执行事件时处理时,事件将具有时间戳字段,时间戳提取器将返回此字段的值。
您展示的实施将失去使用事件时间带来的大部分好处,例如重新处理历史数据以重现历史结果的能力。