Condividi tramite


Informazioni di riferimento sulla modalità in tempo reale

Questa pagina fornisce informazioni di riferimento per la modalità in tempo reale in Structured Streaming, inclusi ambienti, linguaggi, origini, sink e operatori supportati. Per le limitazioni note, vedere Limitazioni della modalità in tempo reale.

Lingue disponibili

La modalità in tempo reale supporta Scala, Java e Python.

Tipi di calcolo

La modalità in tempo reale supporta i tipi di calcolo seguenti:

Tipo di ambiente di calcolo Supportato
Dedicato (in precedenza: utente singolo)
Standard (in precedenza: condiviso) ✓ (solo Python)
Pipeline dichiarative di Lakeflow Spark classiche Non supportato
Pipeline dichiarative di Lakeflow Spark serverless Non supportato
Serverless Non supportato

Modalità di esecuzione

La modalità in tempo reale supporta solo la modalità di aggiornamento:

Modalità di esecuzione Supportato
Modalità di aggiornamento
Append mode Non supportato
Modalità completa Non supportato

Origini e destinazioni

La modalità in tempo reale supporta le origini e i sink seguenti:

Origine o destinazione Come origine Come destinazione
Apache Kafka
Hub eventi (con il connettore Kafka)
Kinesis ✓ (solo modalità EFO) Non supportato
AWS MSK Non supportato
Delta Non supportato Non supportato
Google Pub/Sub Non supportato Non supportato
Apache Pulsar Non supportato Non supportato
Sink arbitrari (con forEachWriter) Non applicabile

Operatori

La modalità in tempo reale supporta la maggior parte degli operatori structured streaming:

Operazioni senza stato

Operatore Supportato
Selection
Proiezione

UDFs

Operatore Supportato
Scala UDF (Funzioni definite dall'utente in Scala) ✓ (con alcune limitazioni)
Python funzione definita dall'utente ✓ (con alcune limitazioni)

Aggregazione

Operatore Supportato
sum
count
max
min
avg
Funzioni di aggregazione

Windowing

Operatore Supportato
Rotolamento
Scorrevole
Sessione Non supportato

Deduplicazione

Operatore Supportato
dropDuplicates ✓ (lo stato è illimitato)
dropDuplicatesWithinWatermark (elimina duplicati all'interno del watermark) Non supportato

Stream to table join

Operatore Supportato
Broadcast table join (la tabella deve essere piccola)
Stream to stream join Non supportato
(flat)MapGroupsWithState Non supportato
transformWithState ✓ (con alcune differenze)
union ✓ (con alcune limitazioni)
forEach
forEachBatch Non supportato
mapPartitions Non supportato (vedere la limitazione)

Considerazioni speciali

Alcuni operatori e funzionalità hanno considerazioni o differenze specifiche quando vengono usati in modalità in tempo reale.

transformWithState in modalità in tempo reale

Per la compilazione di applicazioni con stato personalizzate, Databricks supporta transformWithState, un'API in Apache Spark Structured Streaming. Per altre informazioni sull'API e sui frammenti di codice, vedere Creare un'applicazione con stato personalizzata .

Esistono tuttavia alcune differenze tra il comportamento dell'API in modalità in tempo reale e le query di streaming tradizionali che sfruttano l'architettura micro-batch.

  • La modalità in tempo reale chiama il handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues) metodo per ogni riga.
    • L'iteratore inputRows restituisce un singolo valore. La modalità micro batch lo chiama una volta per ogni chiave e l'iteratore inputRows restituisce tutti i valori per una chiave nel micro batch.
    • Tenere conto di questa differenza durante la scrittura del codice
  • I timer dell'ora dell'evento non sono supportati in modalità in tempo reale.
  • In modalità in tempo reale, i timer vengono ritardati durante l'attivazione a seconda dell'arrivo dei dati:
    • Se un timer è pianificato per le 10:00:00, ma non arrivano dati, il timer non viene attivato immediatamente.
    • Se i dati arrivano alle 10:00:10, il timer viene attivato con un ritardo di 10 secondi.
    • Se non arrivano dati e il batch a esecuzione lunga sta per terminare, il timer si attiva prima della conclusione del batch.

Python funzioni definite dall'utente in modalità in tempo reale

Databricks supporta la maggior parte delle funzioni definite dall'utente Python in modalità in tempo reale:

Senza stato

Tipo UDF Supportato
Python funzioni scalari definite dall'utente ( Funzioni scalari definite dall'utente - Python
Funzione definita dall'utente scalare Arrow
Funzione scalare Pandas definita dall'utente (funzioni pandas definite dall'utente)
Funzione Arrow (mapInArrow)
Funzione Pandas (Map)

Raggruppamento con stato (UDAF)

Tipo UDF Supportato
transformWithState (solo Row interfaccia)
applyInPandasWithState Non supportato

Raggruppamento non con stato (UDAF)

Tipo UDF Supportato
apply Non supportato
applyInArrow Non supportato
applyInPandas Non supportato

Funzioni per le tabelle

Tipo UDF Supportato
UDTF (Python funzioni di tabella definite dall'utente (UDF)) Non supportato
UC UDF Non supportato

Quando si usano funzioni definite dall'utente Python in modalità in tempo reale, è necessario considerare diversi aspetti:

  • Per ridurre al minimo la latenza, configurare le dimensioni del batch di Arrow (spark.sql.execution.arrow.maxRecordsPerBatch) su 1.
    • Compromesso: questa configurazione ottimizza la latenza a scapito della capacità di trasmissione. Per la maggior parte dei carichi di lavoro, questa impostazione è consigliata.
    • Aumentare le dimensioni del batch solo se è necessaria una velocità effettiva maggiore per supportare il volume di input, accettando il potenziale aumento della latenza.
  • Le funzioni definite dall'utente e le funzioni di pandas non funzionano bene con un batch Arrow di dimensione 1.
    • Se si usano funzioni definite dall'utente o funzioni pandas, impostare le dimensioni del batch Arrow su un valore superiore, ad esempio 100 o superiore.
    • Ciò implica una latenza più elevata. Databricks consiglia di usare una funzione o una funzione con funzione o funzione Arrow, se possibile.
  • A causa del problema di prestazioni con pandas, transformWithState è supportato solo con l'interfaccia Row .