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 |
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 | ✓ |
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.
-
transformWithStateInPandaswordt niet ondersteund in realtimemodus. Gebruik in plaats daarvan de api op basis vantransformWithStaterijen, die gebruikmaakt vanRowobjecten 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 (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) |
✓ |
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, 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.
-
transformWithStateInPandaswordt niet ondersteund in realtimemodus. Gebruik in plaats daarvan de api op basis vantransformWithStaterijen, die gebruikmaakt vanRowobjecten in plaats van pandas DataFrames. ZietransformWithStateInPandasniet 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.