Batch vs Stream: Wann was ist
Warum überhaupt wählen
Jedes Datensystem balanciert zwischen Frische (Latenz), Kosten, Komplexität der Unterstützung und Zuverlässigkeit.
Batch - periodische „Portionen“ von Daten mit hohem Durchsatz und niedrigen Kosten pro Datensatz.
Stream - kontinuierliche Verarbeitung von Ereignissen mit minimaler Latenz und Status im Speicher/lokalen Sektoren.
Kurz zu den Modellen
Batch
Quelle: Dateien/Tabellen/Schnappschüsse.
Auslöser: Zeitplan (Stunde/Tag) oder Bedingung (neue Parkettdatei).
Stärken: Einfachheit, Determinismus, vollständiger Datenkontext, billige große Neuberechnungen.
Schwach: kein „Online“, hohe Latenz, „Fenster“ ohne Echtzeitsignale.
Stream
Quelle: Broker (Kafka/NATS/Pulsar), CDC, Warteschlangen.
Auslöser: ein Ereignis.
Stark: geringe Latenz, Reaktivität, natürliche Integration mit dem Produkt.
Schwach: Komplexität der Zeit (Ereignis vs Verarbeitung), Reihenfolge/Takes, Zustand, Ausbeutung.
Lösung: Auswahlmatrix
80/20-Regel: Wenn der SLA Minuten-/Stundenverzögerungen zulässt und es keine reaktiven Daten gibt, nehmen Sie eine Batch. Wenn die Reaktion „Hier und Jetzt“ kritisch ist oder Live-Showcases benötigt werden - Stream (oft + eine zusätzliche Nachtbatch zum Abstimmen).
Typische Szenarien
Batch - wenn es besser ist:- Tägliche Berichterstattung, Abrechnung von Perioden, ML-Training, große Joins, Deduplizierung „mit dem ganzen Satz“.
- Medaillon-Modell (Bronze/Silber/Gold) mit tiefen Validierungen.
- Massen-Backtestes und das Nachbauen von Schaufenstern.
- Anti-Fraud/Monitoring, SRE Alerts, Echtzeit-Balance/Missionen, Empfehlungen „jetzt“.
- Event-as-a-Fact (EDC) -Integrationen, Aktualisierung materialisierter Ansichten (CQRS).
- Microservices: Benachrichtigungen, Webhooks, Reaktionen auf Geschäftsereignisse.
- Der Fluss bildet operative Vitrinen und Signale; Nacht Batch macht Abstimmung, Gewölbe und billige historische Neuberechnungen.
Architektur
Lambda (Stream + Batch)
Stream für Inkrement und Online; Batch für Vollständigkeit und Korrekturen.
Vorteile: Flexibilität und SLA. Nachteile: doppelte Logik, doppelter Code.
Kappa (все — Stream + Replay)
Ein einziges Protokoll als Quelle der Wahrheit; Batch-Neuberechnungen = Wiederholung.
Vorteile: Eine Codebasis, eine einheitliche Semantik. Nachteile: komplizierter Betrieb, Anforderungen an die Speicherung des Protokolls.
Hybrid-Pragmatic
Streaming „Betriebssystem“ + periodische Batch-Jobs für schwere Joins/ML/Korrekturen.
In der Praxis die häufigste Variante.
Zeit, Ordnung, Fenster (für Stream)
Verlassen Sie sich auf die Ereigniszeit, nicht auf die Verarbeitungszeit.
Verwalten Sie die Wasserzeichen und 'allowed _ lateness'; retractions/upserts für späte Ereignisse unterstützen.
Partitionieren Sie die Aggregatschlüssel, planen Sie die „Hot Keys“.
Zuverlässigkeit und Semantik der Effekte
Batch
DB-Transaktionen oder atomarer Ersatz von Partitionen/Tabellen.
Idempotenz - durch deterministische Berechnungen und overwrite/insert-overwrite.
Stream
At-least-once + idempotent sinks (upsert/merge, Aggregatversionen).
Transaktionales „Lesen-Schreiben-Fixieren der Position“ für EOS auf den Effekt.
Deduplizierungstabellen nach 'event _ id '/' operation _ id'.
Speicher und Formate
Batch
Data Lake (Parkett/Delta/Iceberg), OLAP (ClickHouse/BigQuery), Objektspeicher.
ACID-Tabellen für Atomic Replace, Zeitreisen.
Stream
Protokolle/Themen in Brokern, State Stores (RocksDB/embedded), KV/Redis, OLTP für Projektionen.
Scheme Registry (Avro/JSON/Proto), Kompatibilitätsmodi.
Kosten und SLO
Batch: Sie zahlen „in Packungen“ - vorteilhaft für große Mengen, aber die Verzögerung ≥ den Zeitplan.
Stream: Konstante Rentime-Ressourcen, Spitzenwert bei hohem QPS; SLA in Sekunden.
Zählen Sie p95/p99 Latenz, Ende-zu-Ende-Lag, Kosten in USD/Ereignis und TCO-Unterstützung.
Prüfung
Allgemein: Golden-Sets, eigenschaftsbasierte Invarianten, Erzeugung schmutziger Eingänge.
Batch: Determinierung, idempotente Neustarts, Vorher/Nachher-Vergleich von Bögen.
Stream: Out-of-Order/Duplikate, Fault-Injection zwischen Effekt und Offset-Fixierung, Replay-Tests.
Observability
Batch: Dauer des Jobs, Anteil der Fails/Retrays, Frische der Vitrinen, Scan-Kosten.
Stream: Lag nach Zeit/Nachrichten, Wasserzeichen, Late-Rate, State-Größe/Checkpoint-Frequenz, DLQ-Rate.
Überall: 'trace _ id', 'event _ id', Versionen von Schaltungen/Pipelines.
Sicherheit und Daten
PII/PCI - minimieren, at-rest/in-flight verschlüsseln, Felder in Schaltungen markieren ('x-pii').
Für Stream - State/Checkpoint-Schutz, ACL auf Tops.
DSGVO/Recht auf Vergessenwerden: im Stream - Krypto-Löschung/Überarbeitung in Projektionen; in Batch - Neuberechnung von Parteien.
Übergangsstrategien
Batch → Stream: Beginnen Sie mit der Veröffentlichung von Ereignissen (Outbox/CDC), heben Sie ein kleines Echtzeit-Schaufenster an, ohne das bestehende Gewölbe zu berühren.
Stream → Batch: Fügen Sie tägliche Bögen hinzu, um Berichte/Abstimmungen zu erstellen und die Belastung von Streaming-Sinks zu reduzieren.
Anti-Muster
„Alles im Stream“ für die Mode: teuer und kompliziert ohne wirklichen Bedarf.
„One Giant Night Batch“ bei Anforderungen <5 Minuten.
Verwenden Sie Verarbeitungszeit für Geschäftsmetriken.
Rohe CDCs als öffentliche Ereignisse: starre Konnektivität, Schmerz während der Evolution.
Keine Idempotenz in Sinks → Doppeleffekte bei Restarts.
Checkliste der Auswahl
- Frische SLO: Wie viele Sekunden/Minuten/Stunden sind zulässig?
- Stabilität der Eingänge: Gibt es Out-of-Order/Duplikate?
- Benötigen Sie Online-Reaktionen/Schaufenster?
- Kosten: rantime 24/7 gegen „Fenster nach Zeitplan“.
- Korrekturmethode: Retract/Upsert oder nächtliche Neuberechnung.
- Team- und Betriebsreife (Observability, On-Call).
- Anforderungen an „genau einen Effekt“.
- PII/Retention/Recht auf Vergessenwerden.
referens-Muster
Betriebsschaukasten (Hybrid):- Stream: EDC → Projektionen (KV/Redis, OLTP) für UI, idempotent upsert.
- Batch: nightly Gewölbe in OLAP, reconciliation, ML-fichy.
- Stream: Session-Fenster, KEP-Regeln, Alerts <1-5s.
- Batch: Umschulung von Modellen, Offline-Validierung.
- Stream: Trigger, Segmente in Echtzeit.
- Batch: Scoring, LTV-Modelle, Berichte.
FAQ
Ist es möglich, „fast Echtzeit“ auf Batch zu bekommen?
Ja: Microbatches/Trigger-Jobs (alle 1-5 Minuten) sind ein Kompromiss, aber ohne die Komplexität von Fenstern/Late-Events.
Brauchen wir überall einen Lambda-Ansatz?
Nein. Wenn der Thread alle Aufgaben schließt und Sie wissen, wie man replay macht - Kappa ist einfacher zu lang. Ansonsten ein Hybrid.
Wie zählt man die Kosten?
Summieren Sie compute + storage + ops. Fügen Sie für Stream den Preis für Ausfallzeiten „24/7“ und Notnächte hinzu; für Batch ist der Preis für „überfällige“ Daten.
Ergebnis
Wählen Sie Batch, wenn niedrige Kosten, Einfachheit und periodische Bögen wichtig sind; Stream - wenn Reaktivität und Frische kritisch sind. In der Praxis gewinnt der Hybrid: Stream - für Online und Signale, Batch - für Vollständigkeit und billige historische Neuberechnungen. Die Hauptsache ist, SLO zu setzen, Idempotenz/Beobachtbarkeit sicherzustellen und den Korrekturpfad im Voraus zu entwerfen.