Я хочу создать ключевые окна в 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);
Итак, как мне назначить время события и wateramark таким образом, чтобы окно следовало за временем события первого события в качестве начальной точки и выполнялось через 10 минут (время начала первого события может отличаться для разных клавиш). Любая помощь будет очень признательна.
/------------ ( window of 10 minutes )
Streams |------------ ( window of 10 minutes )
\------------ ( window of 10 minutes )
Редактировать: Class i используется для назначения метки времени и водяных знаков
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));
}
}