DataStream<WaterPowerData> waterPowerStream = inputStream.map(new MapFunction<String, WaterPowerData>() {
@Override
public WaterPowerData map(String s) throws Exception {
WaterPowerData waterPowerData = JSONObject.parseObject(s, WaterPowerData.class);
return waterPowerData;
}
}).assignTimestampsAndWatermarks(new AssignerWithPeriodicWatermarks<WaterPowerData>() {
private long currentTimestamp = Long.MIN_VALUE;
private final long maxTimeLag = 5000;
@Override
public long extractTimestamp(WaterPowerData waterPowerData, long l) {
long timestamp = waterPowerData.getOutputTime();
currentTimestamp = Math.max(timestamp, currentTimestamp);
return timestamp;
}
@Nullable
@Override
public Watermark getCurrentWatermark() {
return new Watermark(currentTimestamp == Long.MIN_VALUE ? Long.MIN_VALUE : currentTimestamp - maxTimeLag);
}
});