Использовать временную метку внешнего окна для отладки Siddhi Stream Query
Я планирую использовать исторические трассировки событий (хранящиеся в JSON с моей собственной меткой времени события, записанной для каждого события) для отладки запросов потока сиддхи, которые я только что создал. Мой поток начинается с:
из MyInputEventStream#window.externalTime(my_own_timestamp, 10 мин) выберите вставку some_fields в MyOutpuStream;
и я буду вводить свои события из следов, один за другим.
Предполагаемое событие 1 наступает с указанным my_own_timestamp = 1528905600000, то есть 9 утра по тихоокеанскому времени, 13 июня, а событие 2 наступает через 11 минут, my_own_timestamp = 1528906260000. Я полагаю, что я получу вывод на MyOutpuStream в 9:10 утра, as time_stamp(e2) - time_stamp(e1) > 10 мин, и e2 запустит систему после прохождения окон.
Теперь предполагаемое событие 1 наступает по адресу my_own_timestamp = 1528905600000, то есть в 9:00 утра. Но никаких событий не будет в ближайшие 2 часа. Получу ли я выход в 9:10, так как в действительности время окна должно истечь в 9:10, независимо от того, когда должно наступить следующее событие? Но, похоже, что в этом случае внутренняя система синхронизации Сиддхи должна будет включить метку времени моего события, а затем установить время истечения событий, основываясь на системе часов процесса, на котором работает Сиддхи. Это правильно? не могли бы вы помочь уточнить это.
1 ответ
Вы не получите выходной в 9:10 утра. Потому что, если вы используете externalTime, логика истечения срока действия будет полностью основываться на заданной вами отметке времени. И он будет ждать отметку времени, которая удовлетворяет разнице во времени, которая больше или равна истечению предыдущего события.
То, что происходит внутри, это;
def array previousEvents;
foreach currentEvent in currentEvents (events that are coming in):
def currentTime = currentEvent.timestamp;
foreach previousEvent in previousEvents:
def previousTime = previousEvent.timestamp;
def timeDiff = previousTime - currentTime + windowLength;
if (timeDiff <= 0) {
remove previousEvent from previousEvents;
set expired timestamp of previousEvent to currentTime;
expire previousEvent;
}
previousEvents.add(currentEvent);