2017-11-24 5 views
-3

Es ist eine sehr komplexe Konzeption. 1. window (TumblingEventTimeWindows.of (Time.seconds (n))), hat diese Express zwei Konzept, Fenster: EventWindow, die Ereigniszeit wird durch das Wasserzeichen markiert, das Fenster wird durch das Wasserzeichen erstellt. Zeit ist die Ereigniszeit, n Sekunden ist Ereigniszeit. Die Fenstergröße ist die Ereigniszeitgröße. das Fenster [0 ~ 5s) berechnet nur einmal, wenn das Fenster [5 ~ 10s] schließt, kommt das Ergebnis heraus. 2. allowedLateness (Time.seconds (5)), dieser Express hat nur ein Konzept: die Verspätungszeit (das ist die reale Weltzeit). Aber es ist nicht so einfach wie es aussieht. Das heißt, wenn ein Ereignis [0 ~ 5s] kommt, erzeugt es ein Fenster [0 ~ 5s] oder legt es in das spezifische Fenster [0-5s], und wenn ein anderes Ereignis [5-10] kommt, wird die Witwe [0 ~ 5s) schließen, das neue Fenster [5 ~ 10s] erstellt. Verspätung wird ausgelöst, Ereignis kommt in Fenster [0 ~ 5s] < Verspätungszeit (dies ist die reale Weltzeit), so dass das Ereignis berechnet werden kann. Das ist nicht so genau. allowedLateness wird die Fensterberechnung ändern, dies wird sich von ONLY Window Calculate unterscheiden. OnceLate-Ereignis kommt, wird es einmalig berechnen. Reale Weltzeit ist tatsächlich Serverzeit. 3. neues Wasserzeichen (currentTime - N), dieses Express hat nur ein Konzept: die maximale Out of Reihenfolge, dies verzögert Fenster Berechnung, es ist nur Fensterzeit (geschlossene Zeit) Verzögerung N Sekunden. Es wird nur einmal berechnet.Flink Fenster, Ereignis Zeit, Verspätung, maxOutOfOrdeness

Am wichtigsten ist, wenn Ihre Datengeschwindigkeit zu schnell ist, tritt das Ereignis zu schnell in das Fenster ein, wenn sich das Fenster schließt, vielleicht kommt das berechnete Iterator noch Ereignis, so kann das Ergebnis Sie verwirren.

+0

Ist dies eine Frage oder ein Kommentar? Stack Overflow ist ein Frage-Antwort-Service, also sollten Sie dies zu einer Frage umformulieren. Auch die Beschreibung der Konzepte von Ereigniszeit, Wasserzeichen und Fenstern und erlaubte Verspätung ist * nicht * korrekt. –

+0

Das ist keine Frage, ich benutze nur Stack, um es aufzunehmen. Wenn Sie das Fenster nicht testen, Verspätung, maxoutoorder, wie können Sie mir sagen, dass es nicht korrekt ist. Ich kann Ihnen die Testdaten, den Testdatenserver und den Testcode geben. Sag mir nicht, was richtig ist oder nicht. Wenn Sie darauf bestehen, also bitte sagen Sie mir, die Verspätungszeit ist Wasserzeichenzeit oder Serverzeit? Sagen Sie die maximale Lieferzeit ist Wasserzeit oder Serverzeit? – Chen

+0

Ich kann mich nicht einloggen Flink Forum, also kann ich keine Frage stellen, wenn ich Frage im Stapel über Flink stelle, scheint es nicht so viele Leute können es beantworten oder nicht so viele Leute haben Interesse daran. Also möchte ich einfach meine Erfahrung aufzeichnen. Ich kann Ihnen sagen, dass ich in meiner Cluster-Produce-Umgebung Daten auf dem lokalen Server aggregieren kann und dann Daten im Cluster zusammenfassen kann. Können Sie das tun? – Chen

Antwort

0

Das ist lächerlich. Ich weiß nicht, wie viele Leute das Flink-Event-Zeitfenster testen. Wie ich weiß, verwenden es weniger Leute in der Produktionsumgebung, besonders in einer riesigen Datenumgebung. Hier poste ich meine Testdaten, um Ihnen zu sagen, was das Ereigniszeitfenster ist. Ich denke, der Committer konnte es beantworten. Holen Sie sich das Ergebnis und sagen Sie mir, wer falsch ist. Um das Konzept von Flink zu kennen, brauchen Sie gute Daten zu testen und dann zu verstehen, warum es so ist. Dies sind die Testdaten, Sie benötigen einen Server, um die Daten zu senden.

schlüssel1 | 1483250640000 | Schlüssel1 | 1483250649000 | Schlüssel1 | 1483250642000 | Schlüssel1 | 1483250650000 | Schlüssel1 | 1483250641000 | Schlüssel1 | 1483250653000 | Schlüssel1 | 1483250648000 | Schlüssel1 | 1483250645000 | Schlüssel1 | 1483250658000 | Schlüssel1 | 1483250647000 | Schlüssel1 | 1483250643000 | Schlüssel1 | 1483250661000 | Schlüssel1 | 1483250662000 | schlüssel1 | 1483250667000 | Schlüssel1 | 1483250663000 |

Senden Sie die Daten, wenn flink Socket verbinden. Senden Sie alle Daten mit Schlaf 1s, wenn flink Socket connect. Sie werden das unterschiedliche Ergebnis sehen. Das flink Ereignisfenster ist 5s.

dataStream.keyBy(row -> (String)row.getField(0)) 
     .window(TumblingEventTimeWindows.of(Time.seconds(5))) 
     .allowedLateness(Time.seconds(5)) 
     .fold(initRow(), new MyFoldFunction()) 

Versuchen Sie es. Du wirst wissen, wer Lügner ist.

+0

@Fabian Hueske, könnten Sie es erklären? – Chen

Verwandte Themen