2016-07-14 7 views
1

Ich verwende PatternTimeoutFunction, um die Ereignissequenz zu verwerfen, wenn sie außerhalb des definierten Zeitfensters liegt.Apache Flink CEP-Timout-Muster im Zeitfenster nicht definiert

ich das Wasserzeichen setze als

public Watermark checkAndGetNextWatermark(Event lastElement, long extractedTimestamp) { 
    return new Watermark(extractedTimestamp); 
} 

folge Wenn Muster Timeout geschieht, timeoutTimestamp sollte

zum ersten Ereignisse Zeitstempeln + Wert des Zeitfensters gleich sein, aber Timeout auslöst, nachdem die nächsten Wasserzeichen zu empfangen. Wird die Zeitüberschreitung ausgelöst, nachdem das nächste Wasserzeichen empfangen wurde oder timeWindow abgelaufen ist?

Antwort

1

Die Zeitüberschreitung wird durch den Empfang der Wasserzeichen ausgelöst, wenn Sie die Ereigniszeit verwenden. Weil Sie nur sicher sein können, alle Elemente bis zu einem bestimmten Punkt gesehen zu haben, wenn Sie das Wasserzeichen für diesen Zeitstempel erhalten.

Dies bedeutet, dass der Timeout-Zeitstempel abhängig vom Wert des nächsten Wasserzeichens größer als der erste Ereigniszeitstempel + die Fensterlänge sein kann. Daher ist der Timeout-Zeitstempel tatsächlich die Ereigniszeit, wenn Sie feststellen, dass Ihr Muster abgelaufen ist.

+0

Sollte es Timeout auslösen, wenn ich die Wasserzeichenzeit als neues Watermark (extrahierter Zeitstempel + 1) erhöhe? – ravthiru

+0

Abhängig davon, was 'extrahierterTimestamp' ist. Wenn 'extractedTimestamp' das gleiche wie 'timestampOfElement + windowLength - 1' ist, sollte es ausgelöst werden. –

+0

Was ich beobachtet habe, ist Timeout/Wasserzeichenverarbeitung wird erst nach dem Empfang des nächsten Ereignisses ausgelöst. Ich habe getestet, nur ein Ereignis zu haben, es muss Timeout nach Fensterlänge sein. – ravthiru

Verwandte Themen