Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Auf dieser Seite wird beschrieben, wie Sie die richtige Konfiguration für serverlose Streaming-Workloads auf Azure Databricks auswählen, einschließlich kontinuierlicher Pipelines, inkrementeller Datenerfassung und verwalteter Konnektoren. Die Auswahl der richtigen Konfiguration hängt von den Anforderungen der Quelle, des Shapes und der Latenz des Datenstroms ab.
Was als Streaming-Workload zählt
Eine Streaming-Workload liest potenziell unbegrenzte Daten aus einer Quelle (z. B. einem Cloud-Objektspeicher, einem Nachrichtenbus oder einem Changefeed) und schreibt sie inkrementell in ein Ziel. Azure Databricks unterstützt zwei Muster von Streamingworkloads:
- Kontinuierlich: Eine Pipeline, die ohne Unterbrechung läuft und neue Daten verarbeitet, sobald sie eintreffen. Die Latenz wird in Sekunden gemessen.
- Inkrementell (auch als triggerbasiert bezeichnet): Eine Pipeline, die nach einem Zeitplan oder durch einen Trigger ausgeführt wird, verarbeitet alle Daten, die seit der letzten Ausführung eingegangen sind, und endet. Die Latenz wird in Minuten gemessen.
Einige Workloads sehen wie Streaming-Pipelines aus, sind technisch gesehen aber keine Pipelines. Beispiele sind ein Dienst, der ein Websocket enthält, um auf Ereignisse zu lauschen, eine Chatanwendung, die eine dauerhafte Verbindung pro Benutzer verwaltet, oder einen Webhook-Empfänger, der eingehende HTTP-Anforderungen verarbeitet. Hierbei handelt es sich um Anwendungen, nicht um Streamingpipelinen. Die richtige serverlose Option für diese Workloads finden Sie unter Workloads, die keine Streamingpipelines sind.
Auswählen der richtigen Streamingkonfiguration
Diese Tabelle ordnet Anwendungsfälle den serverlosen Konfigurationen zu, die am besten geeignet sind. Die folgenden Abschnitte auf dieser Seite enthalten weitere Details zu diesen Empfehlungen.
| Anwendungsfall | Empfohlene Konfiguration | Warum? |
|---|---|---|
| Kontinuierliches ETL-Streaming oder kontinuierliche Transformationen mit geringer Latenz | Lakeflow Spark Declarative Pipelines im kontinuierlichen Modus | Der fortlaufende Modus wurde für Always-On-Datenströme entwickelt. Stream-Pipelining führt Mikrobatches gleichzeitig aus, um den Durchsatz und die Latenz zu verbessern. Der verwaltete Zustand sorgt dafür, dass die Wiederherstellung automatisch erfolgt. |
| Inkrementelle Aufnahme aus Cloudspeicher | Verwenden Sie "Auto Loader " innerhalb von Lakeflow Spark Declarative Pipelines (für niedrige Latenz) oder in einem serverlosen Auftrag mit Trigger.AvailableNow() (wenn niedrigere Latenz akzeptabel ist). |
Auto Loader verfolgt neue Dateien effizient.
Trigger.AvailableNow() verarbeitet den Backlog und wird dann beendet, was gut zu einem geplanten oder bedarfsgesteuerten Ausführungsrhythmus passt. |
| Verwaltete Datenaufnahme aus SaaS-Quellen oder Datenbank-CDC | Standardverbindungen in Lakeflow Verbindung | Vollständig verwaltete Konnektoren mit serverlosen Ingestionspipelines. Für unterstützte Quellen ist kein Code erforderlich. |
| Streamen von SQL über Delta-Tabellen | Streamingtabellen | SQL-native inkrementelle Verarbeitung für anfügeorientierte Quellen mit verwalteten Pipelines und Aktualisierung. |
| Periodische Verarbeitung in Mikro-Batches in einem Notebook oder Job |
Serverlose Arbeit mit Trigger.AvailableNow() |
Kosteneffizient, wenn die Frische auf Minutenniveau ausreicht. Die serverlose Berechnung wird schnell gestartet und beendet, wenn der Batch abgeschlossen ist. |
Kontinuierliches Streaming
Verwenden Sie für kontinuierliches Streaming auf serverlosem Compute Lakeflow Spark Declarative Pipelines im fortlaufenden Modus. Die Pipeline bleibt in Betrieb, verarbeitet Datensätze, sobald sie eintreffen, und erholt sich automatisch von Fehlern.
So konfigurieren Sie einen fortlaufenden Datenstrom:
- Konfigurieren Sie die Pipeline als serverlos. Siehe Konfigurieren einer serverlosen Pipeline.
- Legen Sie den Pipelinemodus auf fortlaufend fest. Siehe Ausgelöste vs. Continuous Pipeline-Modus.
- Verwenden Sie Streaming-Tabellen für inkrementell gepflegte Ergebnisse.
Tip
Stream pipelining ist standardmäßig in serverlosen Lakeflow Spark Declarative Pipelines aktiviert. Microbatches werden gleichzeitig und nicht sequenziell ausgeführt, was den Durchsatz für aufnahmeintensive Datenströme verbessert.
Zeitbasierte Structured-Streaming-Trigger wie Trigger.ProcessingTime(interval) und Trigger.Continuous(interval) sind in serverlosen Notebooks oder Jobs nicht verfügbar. Verwenden Sie Lakeflow Spark Declarative Pipelines im fortlaufenden Modus für das Always-On-Muster. Siehe Streaming-Einschränkungen.
Trigger.Once() wird unterstützt, ist jedoch veraltet – migrieren Sie vorhandene Abfragen zu Trigger.AvailableNow().
Inkrementelles und ausgelöstes Streaming
Führen Sie für inkrementelles Streaming Structured Streaming mit Trigger.AvailableNow() in einem serverlosen Job aus. Jede Ausführung verarbeitet alle Daten, die seit dem letzten Checkpoint eingegangen sind, und wird anschließend beendet.
So konfigurieren Sie einen serverlosen Auftrag mit inkrementellem Streaming:
- Planen Sie den Auftrag in der gewünschten Häufigkeit. Siehe Ausführen von Jobs nach einem Zeitplan.
- Verwenden Sie
Trigger.AvailableNow()für jede Streaming-Abfrage im Job. Weitere Informationen finden Sie unter Konfigurieren von Triggerintervallen für strukturiertes Streaming. - Passen Sie die Batchgröße mit
maxFilesPerTriggerodermaxBytesPerTriggeran, um die Arbeitsspeichernutzung vorhersehbar zu halten. Weitere Informationen finden Sie unter Bewährte Methoden für serverloses Berechnen.
Im folgenden Beispiel werden mit Auto Loader neue Dateien aus dem Cloud-Speicher (source_path) gelesen, alle zum Zeitpunkt der Ausführung verfügbaren Daten verarbeitet und in eine Delta-Tabelle geschrieben:
(spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "json")
.option("cloudFiles.maxFilesPerTrigger", 1000)
.load(source_path)
.writeStream
.trigger(availableNow=True)
.option("checkpointLocation", checkpoint_path)
.toTable("catalog.schema.target_table"))
Ein geplanter Trigger.AvailableNow() Job ist das kosteneffizienteste Streaming-Muster in serverlosen Compute-Umgebungen, wenn eine Latenz im Minutenbereich akzeptabel ist. Die Rechenkapazität ist in Sekunden startbereit, führt den Batch-Job aus und fährt sich wieder herunter.
Verwaltete Aufnahme
Wenn es sich bei der Quelle um eine SaaS-Anwendung oder eine betriebsbereite Datenbank handelt, verwenden Sie Lakeflow Connect, anstatt strukturierten Streaming-Code zu schreiben. Lakeflow Connect führt serverlose Ingestionspipelines für Konnektoren wie Salesforce, Workday, SQL Server CDC und PostgreSQL CDC aus. Siehe Managed Connectors in Lakeflow Connect.
Dieser Pfad ist die richtige Antwort, wenn:
- Für Ihre Quelle ist ein Connector vorhanden.
- Sie möchten eine verwaltete Pipeline anstelle von benutzerdefiniertem Code.
- Sie benötigen Schemaentwicklung, Linien und Überwachung außerhalb des Kastens.
SQL-verwaltete inkrementelle Datenverarbeitung
Für Teams, die in erster Linie mit SQL arbeiten, verwenden Sie Streamingtabellen für SQL-native Streaming-Workloads. Sie können Streamingtabellen innerhalb von Lakeflow Spark Declarative Pipelines oder als eigenständige Streamingtabellen definieren.
Bei eigenständigen Streamingtabellen, die mit der CREATE OR REFRESH STREAMING TABLE SQL-Anweisung erstellt wurden, beginnen die anfängliche Aktualisierung der Daten und die Befüllung sofort. Eine dedizierte serverlose Pipeline wird automatisch vom System für jede Streamingtabelle erstellt und verwaltet.
Wenn Sie Batchsemantik-Abfrageergebnisse mit verwalteter Aktualisierung benötigen, verwenden Sie stattdessen materialisierte Ansichten. Siehe Materialisierte Ansichten.
Workloads, die keine Streamingpipelines sind
Eine Workload, die eine langlebige Verbindung halten muss, einen Port abhören oder auf eingehende HTTP-Anforderungen reagieren muss, ist keine Streamingpipeline. es ist eine Anwendung. Führen Sie diese Workloads nicht auf einem serverlosen Auftrag aus. Die richtigen Databricks-Optionen sind:
- Lange ausgeführte Dienste, die eine dauerhafte Verbindung oder einen HTTP-Endpunkt benötigen: Erstellen Sie den Dienst mit Databricks-Apps. Databricks Apps ist die serverlose Plattform zum Hosten von benutzerdefinierten Anwendungen auf Azure Databricks, einschließlich FastAPI, Flask, Streamlit, Dash, Gradio, Node.jsund Shiny-Apps. Siehe Databricks-Apps.
- Eingehende Webhooks oder Ereignislistener: Machen Sie einen HTTP-Endpunkt für Databricks-Apps verfügbar, oder beenden Sie den Webhook in einem externen Dienst und schreiben Sie Ereignisse in Cloudspeicher oder einen Nachrichtenbus, und nehmen Sie sie dann mit einer serverlosen Streamingpipeline auf.
- Benutzerdefinierter Token- oder Anmeldeinformationsaustausch: Verwenden Sie Dienstprinzipale mit OAuth, oder rufen Sie die Databricks-REST-APIs aus einer App auf. Streamingpipelines enthalten keine Sitzungen pro Benutzer oder benutzerdefinierten Tokenstatus.
Wenn Sie prüfen, ob Ihre Workload zu einer Streaming-Pipeline passt, fragen Sie sich:
- Liest die Workload aus einer unbegrenzten Datenquelle und schreibt in eine Senke? Wenn ja, handelt es sich um eine Streamingpipeline.
- Muss die Anwendung eine Verbindung zu einem Client offen halten? Wenn ja, ist es eine Anwendung; verwenden Sie Databricks-Apps.
Einschränkungen
Serverless Compute erzwingt die folgenden Streamingeinschränkungen. Keiner von ihnen verhindert die oben genannten Workloads, wenn sie mit dem richtigen Produkt gekoppelt sind.
- Zeitbasierte strukturierte Streaming-Trigger (
Trigger.ProcessingTime(interval)undTrigger.Continuous(interval)) werden in serverlosen Notizbüchern oder Aufträgen nicht unterstützt. Verwenden Sie Lakeflow Spark Declarative Pipelines im fortlaufenden Modus für Always-On-Streams oderTrigger.AvailableNow()für ausgelöste Läufe. Siehe Streaming-Einschränkungen. - Streaming-Abfragen ohne expliziten Trigger schlagen mit
INFINITE_STREAMING_TRIGGER_NOT_SUPPORTEDfehl. Apache Spark verwendet standardmäßigTrigger.ProcessingTime("0 seconds"), was auf serverlosem Compute nicht unterstützt wird. Legen Sie immer für jede Streamingabfrage festTrigger.AvailableNow(), oder verwenden Sie Lakeflow Spark Declarative Pipelines im fortlaufenden Modus. - Alle Einschränkungen für das Streaming im Zugriffsmodus „Standard“ gelten auch für serverloses Computing. Siehe Streaming-Einschränkungen.
Nächste Schritte
- Konfigurieren einer serverlosen Pipeline
- Ausführen von Lakeflow-Aufträgen auf serverlosem Compute
- Entdecken Sie verwaltete Konnektoren in Lakeflow Connect