2017-01-05 5 views
0

I Funktionen auf einem Datenstrom tue,Flink: Trigger.onElement Arbeits

DataStream<Tuple4<String,String,Double,Double>> price_warning=datastream_in .flatMap(new Splitter())// transformation flatmap .keyBy(2) .window(SlidingProcessingTimeWindows.of(Time.seconds(180),Time.seconds(10))) .trigger(new ElementTimeTrigger()) .apply(new WindowFunction());

Dies ist ein Teil meines Code ist nur für die Idee, dass das, was ich tue. Hier, im Datenstrom, mache ich eine Flatmap, um die datastream_in in Tuple zu parsen, dann ist der Strom keyby auf dem zweiten Feld von Tupel. Danach trage ich ein Schiebefenster gefolgt von trigger. Hier verwende ich onElement() Methode für die Auslösung. Schließlich verwende ich apply als benutzerdefinierte Funktion.

Wenn ich den Code ausführen, wird die Anwendungsfunktion für jede Nachricht, die ich analysiert habe, 18 Mal aufgerufen (180/10, ref. Gleitendes Fenster). Was kann der Grund dafür sein? Wie funktioniert der Trigger genau mit Schiebefenster?

** Ich kann bei Bedarf auch den gesamten Code bereitstellen.

Antwort

0

Trigger sagt, wo ein Fenster ausgegeben werden sollte. In Ihrem Fall, wenn ich Sie richtig verstehe Sie auslösen Fenster emittieren für jedes Element, das Ihren Stream so die Nummer 18 eingegeben. Die SlidingProcessingTimeWindow haben bereits einen Standard-Trigger, der Fenster ausgibt, wenn die Bearbeitungszeit das Ende des Fensters überschreiten.

Für weitere Informationen über Trigger Konzept können Sie lesen this