Streaming in un ambiente di calcolo serverless

Questa pagina descrive come scegliere la configurazione corretta per i carichi di lavoro di streaming serverless in Azure Databricks, incluse pipeline continue, inserimento incrementale e connettori gestiti. La scelta della configurazione corretta dipende dalle esigenze di origine, forma e latenza del flusso.

Cosa conta come carico di lavoro di streaming

Un carico di lavoro di streaming legge i dati non associati da un'origine ,ad esempio l'archiviazione di oggetti cloud, un bus di messaggi o un feed di modifiche, e scrive in un sink in modo incrementale. Azure Databricks supporta due modelli di carichi di lavoro di streaming:

  • Continua: Una pipeline che viene eseguita senza interruzione ed elabora nuovi dati man mano che arrivano. La latenza viene misurata in secondi.
  • Incrementale (detto anche attivato): una pipeline che viene eseguita in base a una pianificazione o a un trigger, elabora tutti i dati arrivati dall'ultima esecuzione e si arresta. La latenza viene misurata in minuti.

Alcuni carichi di lavoro sembrano essere pipeline di streaming, ma non sono tecnicamente pipeline. Ad esempio, un servizio che contiene un websocket aperto per l'ascolto di eventi, un'applicazione di chat che gestisce una connessione permanente per utente o un ricevitore di webhook che gestisce le richieste HTTP in ingresso. Si tratta di applicazioni, non di pipeline di streaming. Per l'opzione serverless appropriata per tali carichi di lavoro, vedere Carichi di lavoro che non sono pipeline di streaming.

Scegliere la configurazione di streaming corretta

Questa tabella mappa i casi d'uso alle configurazioni serverless più adatte. Le sezioni che seguono in questa pagina forniscono maggiori dettagli su queste raccomandazioni.

Caso di utilizzo Configurazione consigliata Perché
Trasformazioni o ETL di streaming a bassa latenza continue Pipeline dichiarative di Lakeflow Spark in modalità continua La modalità continua è progettata per flussi sempre attivi. L’elaborazione in pipeline del flusso esegue i microbatch in parallelo, migliorando la produttività e la latenza. Lo stato gestito garantisce il ripristino automatico.
Inserimento incrementale dall'archiviazione cloud Usare Auto Loader all'interno di Lakeflow Spark Declarative Pipelines (per una latenza ridotta) oppure in un job serverless con Trigger.AvailableNow() (se una latenza maggiore è accettabile). Il caricatore automatico tiene traccia dei nuovi file in modo efficiente. Trigger.AvailableNow() elabora il backlog, quindi termina, il che si adatta a un'esecuzione pianificata o su richiesta.
Inserimento gestito da origini SaaS o database CDC Connettori standard di Lakeflow Connect Connettori completamente gestiti con pipeline di inserimento serverless. Nessun codice necessario per le origini supportate.
Streaming di SQL su tabelle Delta tabelle di streaming Elaborazione incrementale nativa di SQL per origini orientate all'accodamento, con pipeline gestite e aggiornamento.
Elaborazione periodica di micro batch in un notebook o in un processo Processo serverless con Trigger.AvailableNow() Conveniente in termini di costi quando è sufficiente un aggiornamento al minuto. L'ambiente di calcolo serverless viene avviato rapidamente e viene chiuso al termine del batch.

Streaming continuo

Per lo streaming continuo nel calcolo serverless, usare le pipeline dichiarative spark di Lakeflow in modalità continua. La pipeline rimane in esecuzione, elabora i record non appena arrivano e si ripristina automaticamente dopo eventuali guasti.

Per configurare un flusso continuo:

Suggerimento

La pipeline di flusso è abilitata per impostazione predefinita nelle pipeline dichiarative serverless di Lakeflow Spark. I micro-batch vengono eseguiti in parallelo anziché in sequenza, migliorando il throughput dei flussi ad alta intensità di ingestione.

I trigger di structured streaming basati sul tempo, ad esempio Trigger.ProcessingTime(interval) e Trigger.Continuous(interval), non sono disponibili nei notebook serverless o nei processi. Usare le pipeline dichiarative di Lakeflow Spark in modalità continua per il modello always-on. Vedere Limitazioni dello streaming. Trigger.Once() è supportato ma deprecato: eseguire la migrazione di query esistenti a Trigger.AvailableNow().

Streaming incrementale e attivato

Per lo streaming incrementale, eseguire Structured Streaming con Trigger.AvailableNow() in un processo serverless. Ogni esecuzione elabora tutti i dati arrivati dall'ultimo checkpoint e poi termina.

Per configurare un job serverless con streaming incrementale:

L'esempio seguente legge i nuovi file dall'archiviazione cloud (source_path) con il caricatore automatico, elabora tutti i dati disponibili al momento dell'esecuzione e scrive in una tabella Delta:

(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"))

Un processo pianificato Trigger.AvailableNow() è lo schema di streaming più conveniente in termini di costi nell'elaborazione serverless quando una latenza dell'ordine dei minuti è accettabile. Il calcolo viene avviato in secondi, esegue il batch e si arresta.

Inserimento gestito

Se l'origine è un'applicazione SaaS o un database operativo, usare Lakeflow Connect anziché scrivere codice Structured Streaming. Lakeflow Connect esegue pipeline di inserimento serverless per connettori come Salesforce, Workday, SQL Server CDC e PostgreSQL CDC. Vedi Connettori gestiti in Lakeflow Connect.

Questo percorso è la risposta giusta quando:

  • Esiste un connettore per l'origine.
  • Si vuole una pipeline gestita anziché codice personalizzato.
  • Hai bisogno dell'evoluzione dello schema, della tracciabilità dei dati e del monitoraggio integrati fin da subito.

Elaborazione dati incrementale gestita da SQL

Per i team che adottano un approccio SQL-first, usate le tabelle di streaming per i carichi di lavoro di streaming nativi in SQL. È possibile definire tabelle di streaming all'interno di Pipeline dichiarative spark di Lakeflow o come tabelle di streaming autonome.

Per le tabelle di streaming autonome create con l'istruzione SQL, l'aggiornamento CREATE OR REFRESH STREAMING TABLE iniziale dei dati e il popolamento iniziano immediatamente. Una pipeline serverless dedicata viene creata e gestita automaticamente dal sistema per ogni tabella di streaming.

Se sono necessari risultati di query semantica batch con aggiornamento gestito, usare invece le viste materializzate. Vedere Viste materializzate.

Carichi di lavoro non relativi alle pipeline di streaming

Un carico di lavoro che deve contenere una connessione di lunga durata, restare in ascolto su una porta o rispondere alle richieste HTTP in ingresso non è una pipeline di streaming; è un'applicazione. Non eseguire questi carichi di lavoro in un processo serverless. Le opzioni appropriate di Databricks sono:

  • Servizi a esecuzione prolungata che richiedono una connessione permanente o un endpoint HTTP: compilare il servizio con Databricks Apps. Databricks Apps è la piattaforma serverless per l'hosting di applicazioni personalizzate in Azure Databricks, tra cui FastAPI, Flask, Streamlit, Dash, Gradio, Node.jse app Shiny. Vedere App di Databricks.
  • Webhook in ingresso o listener di eventi: esporre un endpoint HTTP su Databricks Apps oppure gestire il webhook in un servizio esterno e scrivere gli eventi nell'archiviazione nel cloud o in un bus di messaggi, quindi acquisirli con una pipeline di streaming serverless.
  • Token personalizzato o scambio di credenziali: usare le entità servizio con OAuth o chiamare le API REST di Databricks da un'app. Le pipeline di streaming non contengono sessioni per utente o lo stato del token personalizzato.

Se state valutando se il vostro carico di lavoro si adatta a una pipeline di elaborazione in streaming, chiedetevi:

  • Il carico di lavoro legge da una fonte di dati illimitata e scrive in una destinazione? Se sì, si tratta di una pipeline di streaming.
  • Il carico di lavoro deve contenere una connessione aperta a un client? In caso affermativo, si tratta di un'applicazione; usare Le app di Databricks.

Limitations

Il calcolo serverless impone i vincoli di streaming seguenti. Nessuno di essi impedisce i carichi di lavoro sopra quando associati al prodotto corretto.

  • I trigger di Structured Streaming basati sul tempo (Trigger.ProcessingTime(interval) e Trigger.Continuous(interval)) non sono supportati nei notebook serverless o nei processi. Usa le pipeline dichiarative Lakeflow Spark in modalità continua per flussi sempre attivi o Trigger.AvailableNow() per le esecuzioni su richiesta. Vedere Limitazioni dello streaming.
  • Le query di streaming senza un trigger esplicito hanno esito negativo con INFINITE_STREAMING_TRIGGER_NOT_SUPPORTED. Per impostazione predefinita, Apache Spark usa Trigger.ProcessingTime("0 seconds"), che non è supportato nel calcolo serverless. Impostare sempre Trigger.AvailableNow() per ogni query di streaming, oppure usare le pipeline dichiarative Spark di Lakeflow in modalità continua.
  • Tutte le limitazioni per lo streaming in modalità di accesso standard si applicano anche al calcolo serverless. Vedere Limitazioni dello streaming.

Passaggi successivi