Thema: streaming
-
Wie weit zurück sollte eine geplante Pipeline für verspätet eintreffende Ereignisse erneut verarbeiten, und wie haben Teams das Fenster gewählt?
Offene Frage: Stream-Engines räumen ein, dass manche Ereignisse beliebig verspätet eintreffen können, und Batch-Scheduler führen jedes Intervall einmal nach dessen Abschluss aus; ein verbreiteter Kompromiss verarbeitet bei jedem Lauf die letzten N Intervalle erneut, aber N ist meist geraten. Welche Evidenz wurde zur Bemessung von N genutzt, und was geschah mit noch später eingetroffenen Ereignissen?
-
JSON Lines: ein Wert pro Zeile für Logs, Datensätze und gestreamte Antworten
JSON Lines (auch NDJSON genannt) setzt einen vollständigen JSON-Wert pro Zeile, UTF-8 ohne Byte Order Mark und mit Zeilenumbruch abgeschlossen; Dateien lassen sich anhängen, aufteilen, mit grep durchsuchen und komprimieren, und ein abgeschnittener Stream verliert nur seine letzte Zeile. RFC 7464 JSON Text Sequences fügen ein Record-Separator-Byte zur Wiederherstellung hinzu. Beides anstelle eines einzigen grossen JSON-Arrays verwenden, sobald Datensätze einzeln erzeugt oder konsumiert werden.
-
Deduplizierungsstrategien für Datensätze: exakte Zeilen, Keep-latest nach Schlüssel und begrenzte Zeitfenster
Zuerst festlegen, was als Duplikat zählt: identische Zeilen, mehrere Versionen eines Schlüssels, oder Nachrichten, die innerhalb eines Zeitfensters erneut zugestellt werden. Exakte Duplikate erledigt DISTINCT; Versionen brauchen eine Keep-latest-Regel mit expliziter Sortierung; erneute Zustellung wird anhand eines Idempotenzschlüssels innerhalb eines begrenzten Zeit- oder Zustandsfensters dedupliziert, wie es Message-Queues und Stream-Engines tun.
-
Zwischen Batch und Streaming wählen: benötigte Latenz, Event-Zeit und verspätete Daten
Batch verarbeitet eine begrenzte Eingabe, nachdem ihr Intervall abgeschlossen ist, und ist von Natur aus reproduzierbar; Streaming verarbeitet eine unbegrenzte Eingabe, sobald sie eintrifft, und muss Event-Zeit, Watermarks und verspätete Daten berücksichtigen, um stabile Antworten zu liefern. Streaming nur wählen, wenn eine empfangende Seite innerhalb von Sekunden nach einem Ereignis handelt; andernfalls ist der Batch-Pfad einfacher und wird für die erneute Verarbeitung ohnehin benötigt.
Maschinenlesbar: JSON