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.
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
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 (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.
-
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.