Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Deze pagina bevat referentie-informatie voor realtimemodus in Structured Streaming, waaronder ondersteunde omgevingen, talen, bronnen, sinks en operators. Zie Beperkingen in realtime voor bekende beperkingen.
Ondersteunde talen
De realtimemodus ondersteunt Scala, Java en Python.
Rekentypen
De realtimemodus ondersteunt de volgende rekentypen:
| Rekentype | Ondersteund |
|---|---|
| Dedicated (voorheen: één gebruiker) | ✓ |
| Standard (voorheen: gedeeld) | ✓ (alleen Python) |
| Klassieke declaratieve Pijplijnen van Lakeflow Spark | Niet ondersteund |
| Lakeflow Spark-declaratieve pijplijnen serverloos | Niet ondersteund |
| Serverless | Niet ondersteund |
Uitvoeringsmodi
De realtimemodus ondersteunt alleen de updatemodus:
| Uitvoeringsmodus | Ondersteund |
|---|---|
| Update-modus | ✓ |
| Append mode | Niet ondersteund |
| Volledige modus | Niet ondersteund |
Bronnen en verzamelpunten
De realtimemodus ondersteunt de volgende bronnen en sinks:
| Bron of ontvanger | Als bron | Als gegevenssink |
|---|---|---|
| Apache Kafka | ✓ | ✓ |
| Event Hubs (met behulp van Kafka-connector) | ✓ | ✓ |
| Kinesis | ✓ (alleen EFO-modus) | Niet ondersteund |
| AWS MSK | ✓ | Niet ondersteund |
| Delta | Niet ondersteund | Niet ondersteund |
| Google Pub/Sub (een berichten- en gebeurtenissenservice van Google) | Niet ondersteund | Niet ondersteund |
| Apache Pulsar | Niet ondersteund | Niet ondersteund |
Willekeurige sinks (met behulp van forEachWriter) |
Niet van toepassing | ✓ |
Bedieners
De realtimemodus ondersteunt de meeste structured streaming-operators:
Staatloze bewerkingen
| Operator | Ondersteund |
|---|---|
| Selectie | ✓ |
| Projectie | ✓ |
UDFs
| Operator | Ondersteund |
|---|---|
| Scala UDF | ✓ (met enkele beperkingen) |
| Python UDF | ✓ (met enkele beperkingen) |
Aggregation
| Operator | Ondersteund |
|---|---|
| sum | ✓ |
| aantal | ✓ |
| max | ✓ |
| min | ✓ |
| avg | ✓ |
| Aggregatiefuncties | ✓ |
Windowing
| Operator | Ondersteund |
|---|---|
| Tumbling | ✓ |
| Sliding | ✓ |
| Session | Niet ondersteund |
Ontdubbeling
| Operator | Ondersteund |
|---|---|
| dropDuplicates | ✓ (de status is niet gebonden) |
| dropDuplicatesWithinWatermark | Niet ondersteund |
Streamen naar tabeldeelname
| Operator | Ondersteund |
|---|---|
| Broadcast table join (tabel moet klein zijn) | ✓ |
| Streamen naar streamdeelname | Niet ondersteund |
| (plat)MapGroupsWithState | Niet ondersteund |
| transformWithState | ✓ (met enkele verschillen) |
| union | ✓ (met enkele beperkingen) |
| forEach | ✓ |
| forEachBatch | Niet ondersteund |
| mapPartitions | Niet ondersteund (zie beperking) |
Speciale overwegingen
Sommige operators en functies hebben specifieke overwegingen of verschillen bij gebruik in realtimemodus.
transformWithState in realtimemodus
Voor het bouwen van aangepaste stateful toepassingen ondersteunt Databricks transformWithState, een API in Apache Spark Structured Streaming. Zie Een aangepaste stateful toepassing bouwen voor meer informatie over de API en codefragmenten.
Er zijn echter enkele verschillen tussen hoe de API zich gedraagt in realtime-modus en traditionele streamingquery's die gebruikmaken van de microbatcharchitectuur.
- In realtime wordt de
handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues)methode voor elke rij aangeroepen.- De
inputRowsiterator retourneert één waarde. De microbatchmodus roept deze eenmaal aan voor elke sleutel en deinputRowsiterator retourneert alle waarden voor een sleutel in de microbatch. - Account voor dit verschil bij het schrijven van uw code
- De
- Timers voor gebeurtenistijd worden niet ondersteund in realtimemodus.
- In realtime-modus worden timers vertraagd bij het activeren, afhankelijk van de aankomst van gegevens:
- Als een timer is gepland voor 10:00:00, maar er geen gegevens binnenkomen, wordt de timer niet onmiddellijk geactiveerd.
- Als de gegevens om 10:00:10 binnenkomen, wordt de timer geactiveerd met een vertraging van 10 seconden.
- Als er geen gegevens binnenkomen en de langlopende batch wordt beëindigd, wordt de timer geactiveerd voordat de batch wordt beëindigd.
Python UDF's in realtime
Databricks ondersteunt het merendeel van Python door de gebruiker gedefinieerde functies (UDF's) in realtime:
Staatloos:
| UDF-type | Ondersteund |
|---|---|
| Python scalaire UDF (Gedefinieerde scalaire functies - Python) | ✓ |
| Pijl scalaire UDF | ✓ |
| Pandas scalar UDF (gebruikersgedefinieerde pandas-functies) | ✓ |
Pijlfunctie (mapInArrow) |
✓ |
| De functie Pandas (Kaart) | ✓ |
Stateful groepering (UDAF)
| UDF-type | Ondersteund |
|---|---|
transformWithState (alleen Row interface) |
✓ |
applyInPandasWithState |
Niet ondersteund |
Groepering zonder toestand (UDAF)
| UDF-type | Ondersteund |
|---|---|
apply |
Niet ondersteund |
applyInArrow |
Niet ondersteund |
applyInPandas |
Niet ondersteund |
Tabelfuncties
| UDF-type | Ondersteund |
|---|---|
| UDTF (Python door de gebruiker gedefinieerde tabelfuncties (UDDF's)) | Niet ondersteund |
| UC UDF | Niet ondersteund |
Er zijn verschillende punten om rekening mee te houden bij het gebruik van Python UDF's in realtimemodus:
- Als u de latentie wilt minimaliseren, configureert u de grootte van de pijlbatch (
spark.sql.execution.arrow.maxRecordsPerBatch) op 1.- Afweging: Deze configuratie optimaliseert voor een lagere latentie ten koste van de doorvoer. Voor de meeste workloads wordt deze instelling aanbevolen.
- Verhoog de batchgrootte alleen als een hogere doorvoer is vereist voor invoervolume, waarbij de potentiële toename van de latentie wordt geaccepteerd.
- Pandas UDFs en functies presteren niet goed met een Arrow batch grootte van 1.
- Als u pandas UDF's of functies gebruikt, stelt u de Arrow-batchgrootte in op een hogere waarde (bijvoorbeeld 100 of hoger).
- Dit impliceert een hogere latentie. Databricks raadt het gebruik van een Arrow UDF of functie aan, indien mogelijk.
- Vanwege het prestatieprobleem met pandas wordt transformWithState alleen ondersteund met de
Rowinterface.