English version

← Learning Hub Lektion 11 Dauer: ca. 16 Min. Thema: Prognose-Updates im 5-Minuten-Takt

Echtzeit-Prognose mit Databricks

⚠ Errata — lies Lektion 12 begleitend dazu

Diese Lektion zeigt, wie du eine 5-Minuten-Pipeline baust, überspringt aber die vorgelagerte Frage, ob du das solltest — und ihr Code setzt Classic Compute voraus. Auf Serverless wird trigger(processingTime=…) nicht unterstützt und Trigger.Once() ist deprecated. Siehe Lektion 12 — Ist Databricks das Richtige für 5-Minuten-SCADA-Daten? für die korrigierte Einordnung der Latenzstufen und die aktuelle Empfehlung, das Ganze als Lakeflow-Pipeline zu bauen.

Im Energiemarkt können neue Telemetrie- und Marktsignale alle 5 Minuten eintreffen. Diese Lektion zeigt, wie Databricks eine latenzarme Prognose-Pipeline unterstützt, die häufige Updates aufnimmt, Features aktualisiert und mit kurzem SLA eine neue Prognose schreibt.

Was „Echtzeit“ hier bedeutet

Für deinen Anwendungsfall bedeutet Echtzeit:

Schnelle Spur + langsame Spur

Nutze eine schnelle Spur für die häufigen 5-Minuten-Updates und eine langsame Spur für das tägliche Modelltraining. Die schnelle Spur nimmt frische Daten auf und bewertet sie; die langsame Spur trainiert Modelle auf historischen Daten neu. Beide müssen dasselbe Delta-basierte Anlagenmodell und dieselbe Data Governance teilen.

Architekturmuster

Echtzeit-Prognosearchitektur im 5-Minuten-Takt Echtzeit-Telemetrie + Marktereignisse Bronze Streaming Delta-Tabelle Silver: inkrementelle Features MLflow Modell-Inferenz Gold: Prognose-Ausgabe

Ingestion: Structured Streaming nach Bronze

Das ist der erste wichtige Schritt. Eine Micro-Batch-Pipeline erfasst jedes 5-Minuten-Payload und schreibt es mit Checkpointing in eine Delta-Bronze-Tabelle. Damit bleiben die Daten dauerhaft, abfragbar und wiederholbar.

from pyspark.sql.functions import col

streaming_df = (
    spark.readStream
         .format("cloudFiles")
         .option("cloudFiles.format", "json")
         .option("cloudFiles.schemaLocation", "/tmp/checkpoints/telemetry_schema")
         .option("cloudFiles.inferColumnTypes", "true")
         .load("/mnt/data/realtime/telemetry/")
         .select(
             col("asset_id"),
             col("timestamp"),
             col("wind_speed"),
             col("power_output"),
             col("market_price")
         )
)

query = (
    streaming_df.writeStream
        .format("delta")
        .option("checkpointLocation", "/tmp/checkpoints/bronze_telemetry")
        .outputMode("append")
        .trigger(processingTime="5 minutes")
        .table("prod.bronze.telemetry")
)

Inkrementelles Silver + Scoring

Nutze eine zweite Micro-Batch-Stufe, die den Bronze-Stream liest und alle 5 Minuten Silver-Features und Prognosen aktualisiert. Ein praxistaugliches Muster ist foreachBatch(): Es gibt dir deterministische Batch-Verarbeitung plus Schreibzugriffe auf Delta-Tabellen.

def process_batch(batch_df, batch_id):
    # 1) Telemetrie mit Anlagen-Metadaten anreichern
    enriched = (
        batch_df
        .join(spark.table("prod.silver.dim_assets"), "asset_id", "left")
        .withColumn("event_time", col("timestamp"))
    )

    # 2) Zeilen für die inkrementelle Feature-Tabelle erzeugen
    features = compute_features(enriched)

    # 3) Mit dem MLflow-Modell scoren
    model = mlflow.pyfunc.load_model("models:/wind-forecast/latest")
    scored = model.predict(features.toPandas())

    # 4) Gold-Prognose schreiben
    to_write = (
        features
        .withColumn("forecast", lit(scored))
        .withColumn("produced_at", current_timestamp())
    )

    (to_write.write
         .format("delta")
         .mode("append")
         .saveAsTable("prod.gold.forecast_ts"))

query = (
    spark.readStream
         .table("prod.bronze.telemetry")
         .writeStream
         .foreachBatch(process_batch)
         .option("checkpointLocation", "/tmp/checkpoints/silver_scoring")
         .trigger(processingTime="5 minutes")
         .start()
)

Hinweis: Wandle in Produktion nicht den gesamten Micro-Batch nach pandas um, außer der Batch ist klein. Für größere Flotten sind verteiltes Scoring in Spark oder ein MLflow-Model-Serving-Endpunkt die sicherere Wahl.

Leitlinien für Echtzeit-Reife

Betriebsregel

Bei einem 5-Minuten-Update-Zyklus solltest du die Pipeline so auslegen, dass jeder Lauf deutlich unter 5 Minuten fertig ist. Das schafft Luft für Retries und stellt sicher, dass der nächste Zyklus nicht verzögert wird.

Wann Micro-Batch besser ist als durchgehendes Streaming

Für deinen Prognose-Anwendungsfall passt eine 5-Minuten-Micro-Batch-Pipeline meistens am besten:

Durchgehendes Streaming ist sinnvoll, wenn die Latenz im Sekundenbereich liegen muss, bringt aber zusätzliche Komplexität bei State Management, Exactly-once-Joins und Betriebsaufwand. Für Prognose-Aktualisierungen alle 5 Minuten ist Micro-Batch der richtige Kompromiss.

Zentrale Implementierungsmuster

MusterWarum es zähltWo du es einsetzt
Auto Loader / cloudFiles Effiziente, schemabewusste inkrementelle Datei-Ingestion Telemetriedateien, die im Cloud-Storage landen
Delta Streaming + foreachBatch Deterministische, wiederholbare Batch-Verarbeitung fürs Scoring Silver- und Gold-Updates der schnellen Spur
MLflow Model Registry Versionierte Modelle + sichere Stage-Promotion Vorhersagen mit exakt dem Modell, das in Produktion läuft
Checkpointing Exactly-once-Zustellung und sicherer Neustart Jeder Streaming-Write nach Delta und jeder Scoring-Job

Verständnis prüfen

Du erhältst alle 5 Minuten Telemetrie und aktualisierst danach jeweils die Prognose. Welches Muster erfüllt Analyse- und Produktionsanforderungen gleichzeitig?

Richtig. Das Muster Delta Bronze → Silver → Gold hält Rohereignisse dauerhaft für die Analyse vor und erzeugt zugleich eine produktionsreife Prognose. Damit bleibt die Anforderung des dualen Zugriffs erfüllt.
Die richtige Antwort ist die Delta-Medaillon-Architektur. Bronze bewahrt die rohen 5-Minuten-Ereignisse, Silver baut Features, Gold speichert die produktiven Prognosen. So bleiben Analyse- und Produktionszugriff gleichermaßen erhalten.

Warum ist Micro-Batch-Verarbeitung bei 5-Minuten-Prognose-Updates meist besser als durchgehendes Streaming?

Genau. Bei 5-Minuten-Updates ist Micro-Batch einfacher und passt zum Ankunftstakt. Du bekommst robuste Delta-Writes und leichtere batch-basierte Feature-Berechnung, ohne umfangreichen Streaming-State einzuführen.
Der Hauptgrund sind Takt und Engineering-Komplexität. Micro-Batch passt bei 5-Minuten-Updates oft am besten, weil es die Zuverlässigkeit von Delta erhält und langlebigen Streaming-State vermeidet. Es liegt nicht daran, dass Delta unzuverlässig wäre oder Modelle nicht nutzbar wären.

Deine 5-Minuten-Prognose-Pipeline darf keinen Zyklus verpassen. Was solltest du überwachen?

Richtig. Bei einer Pipeline mit 5-Minuten-Takt sind die entscheidenden Signale, ob der Lauf innerhalb des SLA fertig wurde, ob Bronze frische Ereignisse erhält und ob die Streaming-Checkpoints gesund sind.
Die kritischen Kennzahlen sind Pipeline-Latenz und der Zustand der Streaming-Checkpoints. Modellversionen und Tabellenkommentare sind für Governance relevant, sichern aber nicht die Einhaltung des 5-Minuten-Zyklus.

Primärquelle

📖 Empfohlene Lektüre

Databricks-Dokumentation zu Structured Streaming — behandelt Micro-Batch-Trigger, Checkpointing, Delta-Writes und produktive Streaming-Muster für latenzarme Pipelines.

Wie es weitergeht

Jetzt weißt du, wie du die schnelle Spur für 5-Minuten-Updates entwirfst. Bitte deinen Lehrer, die nächste Lektion um Echtzeit-Model-Serving oder Streaming-Feature-State in derselben Energiemarkt-Pipeline aufzubauen.


Brauchst du ein Beispiel-Notebook für 5-Minuten-Streaming-Ingestion und -Scoring? Frag mich, dann erstelle ich eines.

Rechtliches: Impressum