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)
Klasické deklarativní kanály Lakeflow Spark Nepodporováno (viz poznámka níže)
Deklarativní kanály Sparku Lakeflow bez serveru Nepodporováno (viz poznámka níže)
Serverless Nepodporováno

Note

Režim v reálném čase není podporován jako přímý typ triggeru strukturovaného streamování v rámci deklarativních kanálů Sparku Lakeflow. Deklarativní kanály Sparku lakeflow však podporují režim v reálném čase prostřednictvím konfigurace na úrovni kanálu. Viz Použití režimu v reálném čase v deklarativních kanálech Sparku Lakeflow.

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 – (pouze 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

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

Operátor 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 – (stav je nevázaný)
OdstraněníDuplicitVeVodoznaku Nepodporováno

Připojení streamu k tabulce

Operátor Podporováno
Spojení tabulky všesměrové (tabulka by měla být malá)
Připojení streamu ke streamu Nepodporováno
(plochý)MapGroupsWithState Nepodporováno
transformWithState – (s některými rozdíly)
sjednocení – (s určitými omezeními)
forEach
forEachBatch Nepodporováno
mapPartitions Nepodporováno (viz omezení)

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. Další informace o rozhraní API a fragmentech kódu najdete v tématu Vytvoření vlastní stavové aplikace .

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 (Uživateli – Python)
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.