Referenční informace k režimu v reálném čase

Podporované jazyky

Režim v reálném čase podporuje Scala, Java a Python.

Typy výpočetních prostředků

Režim v reálném čase podporuje následující typy výpočetních prostředků:

Typ výpočetních prostředků Podporováno
Dedicated (dříve: jeden uživatel) ✓
Standard (dříve: sdíleno) – (pouze Python)
Kanály Lakeflow v klasickém prostředí Nepodporuje se jako strukturované streamování. Podporuje se prostřednictvím konfigurace kanálu. Viz Použití režimu v reálném čase v kanálech Lakeflow.
Kanály Lakeflow na bezserverové službě Nepodporuje se jako strukturované streamování. Podporuje se prostřednictvím konfigurace kanálu. Viz Použití režimu v reálném čase v kanálech Lakeflow.
Serverless Nepodporováno

V případě úloh citlivých na latenci s funkcemi definovanými uživatelem doporučuje Databricks používat vyhrazený režim přístupu. Viz Funkce tabulky.

Režimy provádění

Režim v reálném čase podporuje pouze režim aktualizace:

Režim spuštění Podporováno
Režim aktualizace ✓
režim přidávání Nepodporováno
Režim dokončení Nepodporováno

Zdroje a jímky

Režim v reálném čase podporuje následující zdroje a jímky:

Zdroj nebo jímka Jako zdroj Jako jímka
Apache Kafka ✓ ✓
Event Hubs (pomocí konektoru Kafka) ✓ ✓
Kinesis ✓ (Doporučuje se režim EFO) Nepodporováno
AWS MSK ✓ Nepodporováno
Delta Nepodporováno Nepodporováno
Google Pub/Sub (služba pro zasílání zpráv) Nepodporováno Nepodporováno
Apache Pulsear Nepodporováno Nepodporováno
Libovolné jímky (pomocí forEachWriter) Není relevantní ✓

Operátoři

Režim v reálném čase podporuje většinu operátorů strukturovaného streamování:

Bezstavové operace

Operátor Podporováno
Výběr ✓
Projekce ✓
mapPartitions Nepodporováno (viz omezení)
Union – (s určitými omezeními)

UDFs

Operátor Podporováno
Scala UDF – (s určitými omezeními)
Uživatelsky definovaná funkce v Pythonu – (s určitými omezeními)

Aggregation

Function Podporováno
součet ✓
počet ✓
max ✓
min ✓
avg ✓
Agregační funkce ✓

Windowing

Operátor Podporováno
Tumbling ✓
Sliding ✓
Session Nepodporováno

Deduplication

Operátor Podporováno
odstraněníDuplicit ✓
OdstraněníDuplicitVeVodoznaku ✓

Připojení streamu k tabulce

Operátor Podporováno
Vnitřní spojení ✓
Vnější spojení ✓
Spojení tabulky všesměrového vysílání (velikost tabulky 10 mb nebo menší) ✓
Spojení tabulky (bez vysílání) Nepodporováno

Připojení streamu ke streamu

Operátor Podporováno
Vnitřní spojení – (Databricks Runtime 18 LTS a novější, s některými konfiguracemi)
Vnější spojení Nepodporováno

Note

Pokud chcete stream použít ke streamování spojení v režimu v reálném čase, musíte nastavit další konfigurace Sparku. Další informace o konfiguracích a požadavcích na spouštění více datových proudů najdete v tématu Stream to stream joins.

Libovolný stavový operátor

Operátor Podporováno
(plochý)MapGroupsWithState Nepodporováno
transformWithState – (s některými rozdíly)

Uživatelsky definované jímky

Dřez Podporováno
forEach ✓
forEachBatch Nepodporováno

Zvláštní aspekty

Některé operátory a funkce mají při použití v režimu v reálném čase specifické aspekty nebo rozdíly.

transformWithState v režimu v reálném čase

Pro vytváření vlastních stavových aplikací podporuje transformWithStateDatabricks rozhraní API ve strukturovaném streamování Apache Sparku. Viz Build a custom stateful application with pro transformWithState více informací o API a ukázkách kódu.

Rozhraní API se ale chová jinak v režimu v reálném čase než v dotazech mikrodávkové dávky.

  • Režim v reálném čase volá metodu handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues) pro každý řádek.
    • inputRows Iterátor vrátí jednu hodnotu. Režim mikrodávkový ho volá pro každý klíč jednou a inputRows iterátor vrátí všechny hodnoty pro klíč v mikrodávce.
    • Při psaní kódu je potřeba počítat s tímto rozdílem.
  • Časovače událostí nejsou podporovány v režimu v reálném čase.
  • transformWithStateInPandas není podporován v režimu v reálném čase. Místo toho použijte rozhraní API založené na transformWithState řádcích, které místo datových rámců pandas používá Row objekty.
  • V režimu v reálném čase jsou časovače zpožděné v závislosti na doručení dat:
    • Pokud je časovač naplánovaný na 10:00:00, ale nedorazí žádná data, časovač se neaktivuje okamžitě.
    • Pokud data přicházejí v 10:00:10, časovač se aktivuje se zpožděním 10 sekund.
    • Pokud žádná data nedorazí a dlouhotrvající dávka se chystá k ukončení, časovač se aktivuje před ukončením dávky.

Note

Pokud v Databricks Runtime 18.1 a níže použijete transformWithState a režim v reálném čase pro Python s nízkou propustností, méně než 5 záznamů za sekundu, může se zobrazit zvýšená latence až o několik set milisekund. Databricks doporučuje upgradovat na Databricks Runtime 18.2 a vyšší, aby se vyřešilo.

Python uživatelem v režimu v reálném čase

Databricks podporuje většinu Python uživatelem definovaných funkcí (UDF) v režimu v reálném čase:

Bezstavové

Typ UDF Podporováno
Python skalární funkce definované uživatelem (Python skalární funkce definované uživatelem) ✓
Skalární UDF se šipkami ✓
Skalární UDF pandas (uživatelem definované funkce pandas) ✓
Funkce Šipková (mapInArrow) ✓
Funkce Pandas (Map) ✓

Stavové seskupení (UDAF)

Typ UDF Podporováno
transformWithState (pouze Row rozhraní) ✓
transformWithStateInPandas Nepodporováno. Místo toho použijte rozhraní API založené na transformWithState řádcích, které místo datových rámců pandas používá Row objekty. Podrobnosti nejsou transformWithStateInPandas podporované .
applyInPandasWithState Nepodporováno

Nestavové seskupení (UDAF)

Typ UDF Podporováno
apply Nepodporováno
applyInArrow Nepodporováno
applyInPandas Nepodporováno

Tabulkové funkce

Typ UDF Podporováno
UDTF (Python uživatelem definované funkce tabulek (UDTFs) ) Nepodporováno
UC UDF Nepodporováno

Při použití Python uživatelem definovaných funkcí v režimu v reálném čase je potřeba vzít v úvahu několik bodů:

  • Pokud chcete minimalizovat latenci, nastavte velikost dávky šipky (spark.sql.execution.arrow.maxRecordsPerBatch) na 1.
    • Kompromis: Tato konfigurace optimalizuje latenci na úkor propustnosti. U většiny úloh se toto nastavení doporučuje.
    • Zvětšete velikost dávky pouze tehdy, když je požadována vyšší propustnost, aby se přizpůsobilo množství vstupních dat, při přijetí potenciálního zvýšení latence.
  • UDF a funkce Pandas nefungují dobře s velikostí dávky Arrow 1.
    • Pokud používáte UDF nebo funkce pandas, nastavte velikost dávky Arrow na vyšší hodnotu (například 100 nebo vyšší).
    • To znamená vyšší latenci. Databricks doporučuje použít funkci UDF nebo šipku, pokud je to možné.
  • transformWithStateInPandas není podporován v režimu v reálném čase. Místo toho použijte rozhraní API založené na transformWithState řádcích, které místo datových rámců pandas používá Row objekty. Podívejte se na transformWithStateInPandas nepodporuje a příklady režimu Real-time pro funkční Python příklad s použitím rozhraní API založeného na řádcích.
  • V případě úloh citlivých na latenci s funkcemi definovanými uživatelem doporučuje Databricks používat vyhrazený režim přístupu. V režimu standardního přístupu můžou režijní náklady na izolaci zabezpečení zpomalit výkon UDF.