Referens för realtidsläge

Den här sidan innehåller referensinformation för realtidsläge i strukturerad direktuppspelning, inklusive miljöer, språk, källor, mottagare och operatorer som stöds. Kända begränsningar finns i Begränsningar i realtidsläge.

Språk som stöds

Realtidsläge stöder Scala, Java och Python.

Beräkningstyper

Realtidsläget stöder följande beräkningstyper:

Typ av beräkning Stöds av
Dedikerad (tidigare: enskild användare)
Standard (tidigare: delad) √ (endast Python)
Lakeflow Spark Deklarativa Pipelines: Klassisk Stöds ej
Lakeflow Spark-deklarativa pipelines serverlösa Stöds ej
Serverless Stöds ej

För svarstidskänsliga arbetsbelastningar med UDF:er rekommenderar Databricks att du använder dedikerat åtkomstläge. Se Tabellfunktioner.

Körningslägen

Realtidsläget stöder endast uppdateringsläge:

Körningsläge Stöds av
Uppdateringsläge
Append mode Stöds ej
Fullständigt läge Stöds ej

Källor och avledningar

Realtidsläget stöder följande källor och mottagare:

Källa eller mottagare Som källa Som sänka
Apache Kafka
Event Hubs (med Kafka-koppling)
Kinesis √ (endast EFO-läge) Stöds ej
AWS MSK Stöds ej
Delta Stöds ej Stöds ej
Google Pub/Sub Stöds ej Stöds ej
Apache Pulsar Stöds ej Stöds ej
Godtyckliga mottagare (med forEachWriter) Ej tillämpligt

Operatörer

Realtidsläget stöder de flesta operatorer för strukturerad direktuppspelning:

Tillståndslösa åtgärder

Operatör Stöds av
Urval
Projektion

UDFs

Operatör Stöds av
Scala UDF √ (med vissa begränsningar)
Python-användardefinierad funktion (UDF) √ (med vissa begränsningar)

Aggregation

Operatör Stöds av
sum
count
max
min
avg
Sammansättningsfunktioner

Fönster

Operatör Stöds av
Tumlande
Skjutbar
Session Stöds ej

Deduplication

Operatör Stöds av
dropDuplicates √ (tillståndet är obundet)
dropDuplicatesWithinWatermark Stöds ej

Strömma till tabellkoppling

Operatör Stöds av
Broadcast table join (tabellen ska vara liten)
Strömma till strömanslutning Stöds ej
(platt)MapGroupsWithState Stöds ej
transformWithState √ (med vissa skillnader)
union √ (med vissa begränsningar)
forEach
forEachBatch Stöds ej
mapPartitions Stöds inte (se begränsning)

Särskilda överväganden

Vissa operatorer och funktioner har specifika överväganden eller skillnader när de används i realtidsläge.

transformWithState i realtidsläge

För att skapa anpassade tillståndskänsliga program stöder DatabrickstransformWithState, ett API inom Apache Spark Structured Streaming. Mer information om API och kodfragment finns i Skapa ett anpassat tillståndskänsligt program .

Det finns dock vissa skillnader mellan hur API:et beter sig i realtidsläge och traditionella strömningsfrågor som utnyttjar mikrobatcharkitekturen.

  • Realtidsläget anropar handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues) metoden för varje rad.
    • Iteratorn inputRows returnerar ett enda värde. Mikrobatchläget anropar den en gång för varje nyckel, och inputRows iteratorn returnerar alla värden för en nyckel i mikrobatchen.
    • Ta hänsyn till den här skillnaden när du skriver koden
  • Tidsinställda händelser stöds inte i realtidsläge.
  • transformWithStateInPandas stöds inte i realtidsläge. Använd det radbaserade transformWithState API:et i stället, som använder Row objekt i stället för Pandas DataFrames.
  • I realtidsläge fördröjs timers aktivering beroende på dataankomst:
    • Om en timer är schemalagd till 10:00:00 men inga data anländer, utlöses inte timern omedelbart.
    • Om data kommer klockan 10:00:10 utlöses timern med en fördröjning på 10 sekunder.
    • Om inga data tas emot och den långvariga batchen avslutas utlöses timern innan batchen avslutas.

Note

Om du använder transformWithState och realtidsläge för Python med lågt dataflöde, mindre än 5 poster per sekund i Databricks Runtime 18.1 och senare, kan du se ökade svarstider på upp till några hundra millisekunder. Databricks rekommenderar att du uppgraderar till Databricks Runtime 18.2 och senare för att lösa problemet.

Python UDF:er i realtidsläge

Databricks stöder de flesta Python användardefinierade funktioner (UDF: er) i realtidsläge:

Tillståndslös

UDF-typ Stöds av
Python skalär UDF (Användardefinierade skalärfunktioner – Python)
Pilskalar-UDF
Pandas scalar UDF (pandas-användardefinierade funktioner)
Pilfunktion (mapInArrow)
Pandas-funktion (karta)

Tillståndsberoende gruppering (UDAF)

UDF-typ Stöds av
transformWithState (endast Row gränssnitt)
transformWithStateInPandas Stöds inte. Använd det radbaserade transformWithState API:et i stället, som använder Row objekt i stället för Pandas DataFrames. Mer transformWithStateInPandas information finns i Stöds inte .
applyInPandasWithState Stöds ej

Icke-tillståndskänslig gruppering (UDAF)

UDF-typ Stöds av
apply Stöds ej
applyInArrow Stöds ej
applyInPandas Stöds ej

Tabellfunktioner

UDF-typ Stöds av
UDTF (Python användardefinierade tabellfunktioner (UDTFs)) Stöds ej
UC UDF Stöds ej

Det finns flera saker att tänka på när du använder Python UDF:er i realtidsläge:

  • För att minimera svarstiden konfigurerar du pilbatchstorleken (spark.sql.execution.arrow.maxRecordsPerBatch) till 1.
    • Kompromiss: Den här konfigurationen optimerar för svarstid på bekostnad av dataflödet. För de flesta arbetsbelastningar rekommenderas den här inställningen.
    • Öka batchstorleken endast om ett högre dataflöde krävs för att hantera indatavolymen och acceptera den potentiella ökningen av svarstiden.
  • Pandas UDF:ar och funktioner fungerar inte bra med en Arrow-batchstorlek på 1.
    • Om du använder Pandas UDF:er eller funktioner anger du pilbatchstorleken till ett högre värde (till exempel 100 eller högre).
    • Detta innebär högre svarstid. Databricks rekommenderar att du använder en Arrow UDF eller funktion om möjligt.
  • transformWithStateInPandas stöds inte i realtidsläge. Använd det radbaserade transformWithState API:et i stället, som använder Row objekt i stället för Pandas DataFrames. Se transformWithStateInPandas stöds inte och Real-time-lägesexempel för ett fungerande Python exempel med hjälp av det radbaserade API:et.
  • För svarstidskänsliga arbetsbelastningar med UDF:er rekommenderar Databricks att du använder dedikerat åtkomstläge. I standardåtkomstläge kan omkostnaderna för säkerhetsisolering göra UDF-prestanda långsammare.