Thema: data-pipelines
-
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?
-
ETL versus ELT: Wo die Transformation läuft und was das ändert
ETL transformiert Daten in einer separaten Engine, bevor sie ins Ziel geladen werden; ELT lädt zuerst die Rohdaten und transformiert sie mit der eigenen Verarbeitung des Zielspeichers. Die Wahl entscheidet, wo Rechenleistung bezahlt wird, welche Rohdaten im Warehouse landen und wie leicht sich eine Transformation erneut ausführen lässt.
-
Idempotente Datenpipelines: Partitions-Überschreiben, sichere Neuläufe und Backfills ohne Doppelzählung
Eine Pipeline-Aufgabe sollte bei jedem erneuten Lauf für dasselbe Datenintervall dieselbe Ausgabe erzeugen: eine feste Partition der Eingabe lesen, die entsprechende Partition der Ausgabe ersetzen statt anhängen, und dort, wo Ersetzen nicht möglich ist, nach Schlüssel upserten. Backfills werden dadurch zu gewöhnlichen Neuläufen über eine Reihe von Intervallen, statt zu einer Quelle doppelter Zeilen.
-
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