Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.-
inputRowsIterátor vrátí jednu hodnotu. Mikrodávkový režim jej volá jednou pro každý klíč ainputRowsiterá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á
handleInputRowsjednou 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.
-
transformWithStateInPandasnení podporován v režimu v reálném čase. Místo toho použijte rozhraní API založené natransformWithStateřádcích, které místo datových rámců pandas používáRowobjekty. - 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.
- Pokud chcete minimalizovat latenci, nastavte velikost dávky šipky (
-
transformWithStateInPandasnení podporován v režimu v reálném čase. Místo toho použijte rozhraní API založené natransformWithStateřádcích, které místo datových rámců pandas používáRowobjekty. Podívejte se natransformWithStateInPandasnepodporuje 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.