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

Tato stránka popisuje podporu dotazů v reálném čase, které přímo využívají API pro strukturované streamování. Pro spravované potrubí viz režim reálného času v potrubích Lakeflow, který má samostatné požadavky na běh, zdroj, záchyt a operátora.

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í Podpora prostřednictvím konfigurace pipeline
Kanály Lakeflow na bezserverové službě Podpora prostřednictvím konfigurace pipeline
Bezserverové poznámkové bloky a úlohy Není podporováno pro přímé dotazy Structured Streaming v reálném čase

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; dotazování v Databricks Runtime 19 a vyšším) 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 ✓ (skalární UDF). Seskupené funkce, jako flatMapGroups a mapGroupsWithState, nejsou podporovány.
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.

transformWithState podporuje jak synchronní, tak asynchronní procesory v reálném čase. Pro požadavky na asynchronní zpracování viz Asynchronní zpracování s transformWithState.

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

  • U synchronních procesorů režim reálného času volá metodu handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues) pro každý řádek.
    • inputRows Iterátor vrátí jednu hodnotu. Mikrodávkový režim jej volá jednou pro každý klíč a inputRows iterátor vrací všechny hodnoty pro klíč v mikrodávce.
    • Tento rozdíl zohledněte při psaní kódu.
  • U asynchronních procesorů režim v reálném čase seskupuje řádky, které přicházejí společně, a volá handleInputRows jednou pro každý klíč ve skupině, se všemi řádky tohoto klíče. Protože režim v reálném čase spouště dlouhé dávky, může stejný klíč přijímat mnoho hovorů v rámci jedné dávky.
  • Č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) Nepodporováno (viz omezení)
Funkce Pandas (Map) Nepodporováno (viz omezení)

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ů:

  • V Databricks Runtime 19 a vyšších režim real-time sdružuje vstupní řádky podle času pro všechny UDF, které režim realního času podporuje. Každá dávka sbírá řádky, které dorazily během krátkého časového okna (10 milisekund), tedy dokud nedosáhne maximální velikosti dávky, a poté je odešle do UDF. Tím se vyvažuje latence a propustnost, takže nemusíte nastavovat velikost batch size Arrow (spark.sql.execution.arrow.maxRecordsPerBatch) na 1.
  • V Databricks Runtime 18 LTS a nižších jsou řádky dávkovány pouze podle počtu dat:
    • Pokud chcete minimalizovat latenci, nastavte velikost dávky šipky (spark.sql.execution.arrow.maxRecordsPerBatch) na 1. Tato konfigurace optimalizuje latenci na úkor propustnosti. 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.
    • Pandas UDF nefungují dobře s velikostí Arrow batch 1. Pokud používáte pandas UDF, nastavte velikost dávky Arrow na vyšší hodnotu (například 100 nebo více). To znamená vyšší latenci. Databricks doporučuje pokud možno použít Arrow UDF.
  • 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.