Я хочу создать окна с ключами в Apache flink, чтобы окна для каждого ключа выполнялись через n минут после прибытия первого события для ключа. Можно ли сделать это с использованием временных характеристик событий (поскольку время обработки зависит от системных часов и неизвестно, когда появится первое событие). Если возможно, объясните назначение времени события и водяного знака также событиям, а также объясните, как вызвать функцию окна процесса через n минут.
Ниже приведена часть кода, которая может дать вам представление о том, что я делаю в настоящее время:
//Make keyed events so as to start a window for a key
KeyedStream<SourceData, Tuple> keyedEvents =
env.addSource(new MySource(configData),"JSON Source")
.assignTimestampsAndWatermarks(new MyTimeStamps())
.setParallelism(1)
.keyBy("service");
//Start a window for windowTime time
DataStream<ResultData> resultData=
keyedEvents
.timeWindow(Time.minutes(winTime))
.process(new ProcessEventWindow(configData))
.name("Event Collection Window")
.setParallelism(25);
Итак, как бы мне назначить время события и водную отметку, чтобы окно следовало за временем первого события в качестве начальной точки и выполнялось через 10 минут (время начала первого события может быть разным для разных клавиш). Любая помощь могла бы быть полезна.
/------------ ( window of 10 minutes )
Streams |------------ ( window of 10 minutes )
\------------ ( window of 10 minutes )
Изменить: класс, который я использовал для назначения отметки времени и водяных знаков
public class MyTimeStamps implements AssignerWithPeriodicWatermarks<SourceData> {
@Override
public long extractTimestamp(SourceData element, long previousElementTimestamp) {
//Will return epoch of currentTime
return GlobalUtilities.getCurrentEpoch();
}
@Override
public Watermark getCurrentWatermark() {
// TODO Auto-generated method stub
//Will return epoch of currentTime + 10 minutes
return new Watermark(GlobalUtilities.getTimeShiftNMinutesEpoch(10));
}
}