Referens för 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-pipelines på klassisk Stöds inte som strukturerad direktuppspelning. Stöds via pipelinekonfiguration. Se Använda realtidsläge i Lakeflow-pipelines.
Lakeflow-pipelines på serverlös Stöds inte som strukturerad direktuppspelning. Stöds via pipelinekonfiguration. Se Använda realtidsläge i Lakeflow-pipelines.
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 ✓ (EFO-läge rekommenderas) 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
mapPartitions Stöds inte (se begränsning)
Union √ (med vissa begränsningar)

UDFs

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

Aggregation

Function 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
dropDuplicatesWithinWatermark

Strömma till tabellkoppling

Operatör Stöds av
Inre sammanfogning
Yttre koppling
Broadcast table join (tabellstorlek på 10 mb eller mindre)
Tabellkoppling (utan sändning) Stöds ej

Strömma till strömanslutning

Operatör Stöds av
Inre sammanfogning √ (Databricks Runtime 18 LTS och senare, med vissa konfigurationer)
Yttre koppling Stöds ej

Note

Om du vill använda stream för att strömma kopplingar i realtidsläge måste du ange ytterligare Spark-konfigurationer. Mer information om konfigurationerna och kraven för att köra flera strömmar finns i Stream to stream joins (Strömma till stream-kopplingar).

Godtycklig tillståndskänslig operator

Operatör Stöds av
(platt)MapGroupsWithState Stöds ej
transformWithState √ (med vissa skillnader)

Användardefinierade mottagare

Sjunka Stöds av
forEach
forEachBatch Stöds ej

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. Se Bygg en anpassad stateful applikation med för transformWithState mer information om API:et och kodutsnitten.

API:et beter sig dock annorlunda i realtidsläge än i mikrobatchfrågor.

  • 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 (Python skalär användardefinierade funktioner (UDF))
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:

  • Om du vill minimera svarstiden anger 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.