Verwijzing naar realtimemodus

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)
Lakeflow-pijplijnen op klassiek Niet ondersteund als Structured Streaming. Ondersteund via pijplijnconfiguratie. Zie Realtime-modus gebruiken in Lakeflow-pijplijnen.
Lakeflow-pijplijnen op serverloze Niet ondersteund als Structured Streaming. Ondersteund via pijplijnconfiguratie. Zie Realtime-modus gebruiken in Lakeflow-pijplijnen.
Serverless Niet ondersteund

Voor latentiegevoelige workloads met UDF's raadt Databricks u aan om de toegewezen toegangsmodus te gebruiken. Zie tabelfuncties.

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
mapPartitions Niet ondersteund (zie beperking)
Union ✓ (met enkele beperkingen)

UDFs

Operator Ondersteund
Scala UDF ✓ (met enkele beperkingen)
Python UDF ✓ (met enkele beperkingen)

Aggregation

Function Ondersteund
sum
aantal
max
min
avg
Aggregatiefuncties

Windowing

Operator Ondersteund
Tumbling
Sliding
Session Niet ondersteund

Ontdubbeling

Operator Ondersteund
dropDuplicates
dropDuplicatesWithinWatermark

Streamen naar tabeldeelname

Operator Ondersteund
Interne koppeling
Outer Join
Tabeldeelname uitzenden (tabelgrootte van 10 mb of minder)
Tabeldeelname (zonder uitzending) Niet ondersteund

Streamen naar streamdeelname

Operator Ondersteund
Interne koppeling ✓ (Databricks Runtime 18 LTS en hoger, met enkele configuraties)
Outer join Niet ondersteund

Opmerking

Als u stream wilt gebruiken om joins in realtime te streamen, moet u aanvullende Spark-configuraties instellen. Zie Stream to stream joins voor meer informatie over de configuraties en voor de vereisten voor het uitvoeren van meerdere streams.

Willekeurige stateful operator

Operator Ondersteund
(plat)MapGroupsWithState Niet ondersteund
transformWithState ✓ (met enkele verschillen)

Door de gebruiker gedefinieerde sinks

Sink Ondersteund
forEach
forEachBatch Niet ondersteund

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.

De API gedraagt zich echter anders in realtime-modus dan in microbatchquery's.

  • In realtime wordt de handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues) methode voor elke rij aangeroepen.
    • De inputRows iterator retourneert één waarde. De microbatchmodus roept deze eenmaal aan voor elke sleutel en de inputRows iterator retourneert alle waarden voor een sleutel in de microbatch.
    • Account voor dit verschil bij het schrijven van uw code
  • Timers voor gebeurtenistijd worden niet ondersteund in realtimemodus.
  • transformWithStateInPandas wordt niet ondersteund in realtimemodus. Gebruik in plaats daarvan de api op basis van transformWithState rijen, die gebruikmaakt van Row objecten in plaats van pandas DataFrames.
  • 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.

Opmerking

Als u in Databricks Runtime 18.1 en lager transformWithState en realtime-modus gebruikt voor Python met lage doorvoer, minder dan 5 records per seconde, ziet u mogelijk meer latenties van maximaal enkele honderd milliseconden. Databricks raadt u aan om een upgrade uit te voeren naar Databricks Runtime 18.2 en hoger om dit op te lossen.

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 (Python scalaire door de gebruiker gedefinieerde functies (UDF's))
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)
transformWithStateInPandas Wordt niet ondersteund. Gebruik in plaats daarvan de api op basis van transformWithState rijen, die gebruikmaakt van Row objecten in plaats van pandas DataFrames. Zie transformWithStateInPandas niet ondersteund voor meer informatie.
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, stelt u de grootte van de pijlbatch (spark.sql.execution.arrow.maxRecordsPerBatch) in 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.
  • transformWithStateInPandas wordt niet ondersteund in realtimemodus. Gebruik in plaats daarvan de api op basis van transformWithState rijen, die gebruikmaakt van Row objecten in plaats van pandas DataFrames. Zie transformWithStateInPandas niet ondersteund en voorbeelden van Realtime voor een werkend Python voorbeeld met behulp van de api op basis van rijen.
  • Voor latentiegevoelige workloads met UDF's raadt Databricks u aan om de toegewezen toegangsmodus te gebruiken. In de standaardtoegangsmodus kan de overhead van beveiligingsisolatie de UDF-prestaties vertragen.