Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
inputRowsreturnerar ett enda värde. Mikrobatchläget anropar den en gång för varje nyckel, ochinputRowsiteratorn returnerar alla värden för en nyckel i mikrobatchen. - Ta hänsyn till den här skillnaden när du skriver koden
- Iteratorn
- Tidsinställda händelser stöds inte i realtidsläge.
-
transformWithStateInPandasstöds inte i realtidsläge. Använd det radbaseradetransformWithStateAPI:et i stället, som använderRowobjekt 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.
-
transformWithStateInPandasstöds inte i realtidsläge. Använd det radbaseradetransformWithStateAPI:et i stället, som använderRowobjekt i stället för Pandas DataFrames. SetransformWithStateInPandasstö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.