Streamování na bezserverové výpočetní prostředky

Tato stránka popisuje, jak zvolit správnou konfiguraci pro úlohy bezserverového streamování na Azure Databricks, včetně průběžných kanálů, přírůstkového příjmu dat a spravovaných konektorů. Volba správné konfigurace závisí na potřebách zdroje, tvaru a latence datového proudu.

Co se počítá jako úloha streamování

Streamovací úloha čte neomezený datový proud ze zdroje (například z cloudového objektového úložiště, sběrnice zpráv nebo kanálu změn) a průběžně jej zapisuje do cílového úložiště. Azure Databricks podporuje dva vzory úloh streamování:

  • Průběžný: Kanál, který se spouští bez zastavení a zpracovává nová data při jejich doručení. Latence se měří v sekundách.
  • Přírůstkové (označované také jako aktivované): Kanál, který běží podle plánu nebo triggeru, zpracovává všechna data, která přišla od posledního spuštění, a zastaví se. Latence se měří v minutách.

Některé úlohy vypadají jako streamovací pipeline, ale z technického hlediska jimi nejsou. Mezi příklady patří služba, která obsahuje websocket otevřený pro naslouchání událostem, chatovací aplikaci, která udržuje trvalé připojení na uživatele nebo příjemce webhooku, který zpracovává příchozí požadavky HTTP. Jedná se o aplikace, nikoli kanály streamování. Správnou bezserverovou možnost pro tyto úlohy najdete v tématu Úlohy, které nejsou kanály streamování.

Volba správné konfigurace streamování

Tato tabulka přiřazuje jednotlivé případy použití k serverless konfiguracím, které jim nejlépe odpovídají. Oddíly, které na této stránce následují, poskytují podrobnější informace o těchto doporučeních.

Případ použití Doporučená konfigurace Proč
Průběžné streamování ETL nebo transformace s nízkou latencí Lakeflow Spark Declarative Pipelines v kontinuálním režimu Nepřetržitý režim je určen pro trvale aktivní streamy. Kanálování streamu spouští mikrobatchy souběžně a zlepšuje propustnost a latenci. Spravovaný stav zajišťuje automatickou obnovu.
Přírůstkový příjem dat z cloudového úložiště Použijte Auto Loader v deklarativních kanálech Lakeflow Spark (pro nízkou latenci) nebo v bezserverové úloze s Trigger.AvailableNow() (pokud je přijatelná nižší latence). Auto Loader efektivně sleduje nové soubory. Trigger.AvailableNow() zpracuje backlog a pak ukončí, což odpovídá plánovanému tempu nebo tempu na vyžádání.
Spravovaný příjem dat ze zdrojů SaaS nebo databáze CDC Standardní konektory ve službě Lakeflow Connect Plně spravované konektory s kanály příjmu dat bez serveru Pro podporované zdroje není vyžadován žádný kód.
Streamování SQL přes tabulky Delta tabulky streamování Přírůstkové zpracování nativní pro SQL pro zdroje orientované na přidávání dat se spravovanými datovými potrubími a obnovou.
Pravidelné mikrodávkové zpracování v poznámkovém bloku nebo úloze Bezserverová úloha s využitím Trigger.AvailableNow() Nákladově efektivní, když je dostatek aktuálnosti na úrovni minut. Bezserverové výpočetní prostředí se rychle spustí a po dokončení dávky se ukončí.

Průběžné streamování

Pro průběžné streamování na bezserverových výpočetních prostředcích použijte deklarativní kanály Sparku Lakeflow v průběžném režimu. Kanál zpracování zůstává spuštěný, zpracovává záznamy, jakmile přicházejí, a po selhání se automaticky obnoví.

Konfigurovat nepřetržitý datový proud:

Tip

Řetězení streamů je ve výchozím nastavení povoleno v serverless Lakeflow Spark Declarative Pipelines. Mikrobatchy běží souběžně, nikoli postupně, což zlepšuje propustnost datových proudů náročných na příjem dat.

Triggery strukturovaného streamování založené na čase, například Trigger.ProcessingTime(interval) a Trigger.Continuous(interval), nejsou dostupné v bezserverových poznámkových blocích nebo úlohách. Použijte deklarativní datové kanály Lakeflow Spark v kontinuálním režimu pro scénář nepřetržitého provozu. Viz omezení streamování. Trigger.Once() je podporována, ale zastaralá – migrujte existující dotazy na Trigger.AvailableNow().

Inkrementální a spouštěné streamování

Pro přírůstkové streamování spusťte Structured Streaming v bezserverové úloze s Trigger.AvailableNow(). Každé spuštění zpracovává všechna data, která přišla od posledního kontrolního bodu, a pak se ukončí.

Konfigurace bezserverové úlohy s přírůstkovým streamováním:

Následující příklad načítá nové soubory z cloudového úložiště (source_path) pomocí Auto Loaderu, zpracovává všechna data dostupná v době běhu a zapisuje je do tabulky Delta:

(spark.readStream
   .format("cloudFiles")
   .option("cloudFiles.format", "json")
   .option("cloudFiles.maxFilesPerTrigger", 1000)
   .load(source_path)
   .writeStream
   .trigger(availableNow=True)
   .option("checkpointLocation", checkpoint_path)
   .toTable("catalog.schema.target_table"))

Naplánovaná Trigger.AvailableNow() úloha je nákladově nejefektivnější model streamování na bezserverových výpočetních prostředcích, pokud je přijatelná latence na úrovni minut. Výpočetní instance se během několika sekund spustí, zpracuje dávku a poté se vypne.

Spravovaný příjem dat

Pokud je zdrojem aplikace SaaS nebo provozní databáze, místo psaní kódu strukturovaného streamování použijte Lakeflow Connect. Lakeflow Connect spouští kanály příjmu dat bez serveru pro konektory, jako jsou Salesforce, Workday, SQL Server CDC a PostgreSQL CDC. Podívejte se na spravované konektory v Lakeflow Connect.

Tato cesta je správná odpověď, když:

  • Pro váš zdroj existuje konektor.
  • Chcete spravovaný kanál místo vlastního kódu.
  • Potřebujete evoluci schématu, sledování původu dat a monitorování ihned po nasazení.

Přírůstkové zpracování dat spravovaných SQL

Pro týmy upřednostňující SQL použijte streamingové tabulky pro streamovací úlohy nativní pro SQL. Streamované tabulky můžete definovat uvnitř deklarativních kanálů Sparku Lakeflow nebo jako samostatné streamovací tabulky.

U samostatných streamovacích tabulek vytvořených příkazem SQL CREATE OR REFRESH STREAMING TABLE začínají počáteční aktualizace a naplnění daty okamžitě. Pro každou streamovací tabulku se automaticky vytvoří a spravuje vyhrazené bezserverové potrubí systémem.

Pokud potřebujete výsledky dávkových sémantických dotazů se spravovaným obnovením, použijte místo toho materializovaná zobrazení. Podívejte se na Materializovaná zobrazení.

Pracovní zátěže, které nejsou streamovacími datovými potrubími

Pracovní zátěž, která potřebuje udržovat dlouhodobé připojení, naslouchat na portu nebo reagovat na příchozí požadavky HTTP, není streamovací kanál; je to aplikace. Tyto úlohy nespustíte v bezserverové úloze. Správné možnosti Databricks jsou:

  • Dlouhotrvající služby, které potřebují trvalé připojení nebo koncový bod HTTP: Sestavte službu pomocí Služby Databricks Apps. Databricks Apps je bezserverová platforma pro hostování vlastních aplikací na Azure Databricks, včetně Aplikací FastAPI, Flask, Streamlit, Dash, Gradio, Node.jsa Shiny. Podívejte se na Aplikace Databricks.
  • Příchozí webhooky nebo naslouchače událostí: Vystavte koncový bod HTTP v Databricks Apps nebo ukončete webhook v externí službě a zapisujte události do cloudového úložiště nebo sběrnice zpráv; poté je zpracujte pomocí bezserverové streamovací pipeline.
  • Vlastní token nebo výměna přihlašovacích údajů: Použijte instanční objekty služby s OAuth nebo volejte rozhraní REST API Databricks z aplikace. Streamovací kanály neudržují relace pro jednotlivé uživatele ani vlastní stav tokenů.

Pokud vyhodnocujete, jestli vaše úloha odpovídá kanálu streamování, zeptejte se:

  • Čte úloha z nevázaného zdroje dat a zapisuje se do jímky? Pokud ano, jedná se o streamovací kanál.
  • Musí úloha obsahovat otevřené připojení k klientovi? Pokud ano, jedná se o aplikaci; používat aplikace Databricks.

Omezení

Bezserverové výpočetní prostředky ukládají následující omezení streamování. Žádná z nich nebrání výše uvedeným úlohám při spárování se správným produktem.

  • Triggery strukturovaného streamování založené na čase (Trigger.ProcessingTime(interval) a Trigger.Continuous(interval)) nejsou podporované v bezserverových poznámkových blocích nebo úlohách. Deklarativní kanály Sparku Lakeflow používejte v průběžném režimu pro streamy always-on nebo Trigger.AvailableNow() pro aktivovaná spuštění. Viz omezení streamování.
  • Dotazy streamování bez explicitního triggeru selžou .INFINITE_STREAMING_TRIGGER_NOT_SUPPORTED Apache Spark ve výchozím nastavení používá Trigger.ProcessingTime("0 seconds"), které není podporováno v bezserverovém výpočetním prostředí. Vždy nastavte Trigger.AvailableNow() u každého streamovacího dotazu nebo použijte Lakeflow Spark Declarative Pipelines v kontinuálním režimu.
  • Všechna omezení streamování v režimu standardního přístupu platí také pro bezserverové výpočetní prostředky. Viz omezení streamování.

Další kroky