Direktuppspelning vid serverlös beräkning

Den här sidan beskriver hur du väljer rätt konfiguration för serverlösa strömningsarbetsbelastningar på Azure Databricks, inklusive kontinuerliga pipelines, inkrementell inmatning och hanterade anslutningsappar. Valet av rätt konfiguration beror på strömmens behov av källa, form och svarstid.

Vad räknas som en arbetsbelastning för direktuppspelning

En strömmande arbetsbelastning läser obundna data från en källa (till exempel lagring av molnobjekt, en meddelandebuss eller ett ändringsflöde) och skriver till en mottagare stegvis. Azure Databricks stöder två mönster för strömningsarbetsbelastningar:

  • Kontinuerlig: En pipeline som körs utan att stoppa och bearbetar nya data när den tas emot. Svarstiden mäts i sekunder.
  • Inkrementell (kallas även triggad): En pipeline som körs enligt ett schema eller en trigger, bearbetar all data som har anlänt sedan den senaste körningen och avslutas. Svarstiden mäts i minuter.

Vissa arbetsflöden verkar vara streamingpipelines men är tekniskt sett inga pipelines. Exempel är en tjänst som har en websocket öppen för att lyssna efter händelser, ett chattprogram som upprätthåller en beständig anslutning per användare eller en webhook-mottagare som hanterar inkommande HTTP-begäranden. Det här är applikationer, inte direktuppspelningspipelines. Information om rätt serverlöst alternativ för dessa arbetsbelastningar finns i Arbetsbelastningar som inte är strömningspipelines.

Välj rätt konfiguration för direktuppspelning

Den här tabellen mappar användningsfall till de serverlösa konfigurationer som passar dem bäst. Avsnitten som följer på den här sidan innehåller mer information om dessa rekommendationer.

Användningsfall Rekommenderad konfiguration Varför
Kontinuerlig ETL för direktuppspelning med låg latens eller transformeringar Lakeflow Spark Declarative Pipelines i kontinuerligt läge Kontinuerligt läge är utformat för alltid aktiva strömmar. Stream pipelining kör mikrobatcher samtidigt, vilket förbättrar dataflödet och svarstiden. Det hanterade tillståndet gör återställningen automatisk.
Inkrementell inmatning från molnlagring Använd Auto Loader i Lakeflow Spark Deklarativa pipelines (för låg svarstid) eller i ett serverlöst jobb med Trigger.AvailableNow() (om lägre svarstid är acceptabel). Auto Loader övervakar nya filer effektivt. Trigger.AvailableNow() bearbetar kvarvarande uppgifter och avslutar sedan, vilket passar en schemalagd takt eller en kadens på begäran.
Hanterad inmatning från SaaS-källor eller databas-CDC Standardanslutningar i Lakeflow Connect Fullständigt hanterade anslutningar med serverlösa pipelines för datainhämtning. Ingen kod krävs för källor som stöds.
Strömma SQL över Delta-tabeller Strömmande tabeller SQL-baserad inkrementell bearbetning för källor som endast lägger till data, med hanterade pipelines och uppdateringar.
Periodisk mikrobatchbearbetning i en notebook eller ett jobb Serverlöst jobb med Trigger.AvailableNow() Kostnadseffektivt när färskhet på minutnivå räcker. Serverlös beräkning startar snabbt och avslutas när batchen är klar.

Kontinuerlig direktuppspelning

För kontinuerlig strömning på serverlös beräkning använder du Lakeflow Spark Deklarativa pipelines i kontinuerligt läge. Pipelinen förblir igång, bearbetar dataposter allteftersom de kommer in och återhämtar sig automatiskt efter fel.

Så här konfigurerar du en kontinuerlig ström:

Tip

Strömningspipelining är aktiverat som standard i serverlösa Lakeflow Spark Declarative Pipelines. Mikrobatcher körs parallellt snarare än sekventiellt, vilket förbättrar genomströmningen för strömmar med hög inmatningsbelastning.

Tidsbaserade Structured Streaming-utlösare, till exempel Trigger.ProcessingTime(interval) och Trigger.Continuous(interval), är inte tillgängliga i serverlösa anteckningsböcker eller jobb. Använd Lakeflow Spark Deklarativa pipelines i kontinuerligt läge för always-on-mönstret. Se Begränsningar för direktuppspelning. Trigger.Once() stöds men är inaktuell – migrera befintliga frågor till Trigger.AvailableNow().

Inkrementell och händelsestyrd streaming

För inkrementell direktuppspelning kör du Structured Streaming med Trigger.AvailableNow() i ett serverlöst jobb. Varje körning bearbetar all data som har anlänt sedan den senaste kontrollpunkten och avslutas sedan.

Så här konfigurerar du ett serverlöst jobb med inkrementell direktuppspelning:

I följande exempel läses nya filer från molnlagring (source_path) med Auto Loader, bearbetar alla data som är tillgängliga vid körningen och skriver till en Delta-tabell:

(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"))

Ett schemalagt Trigger.AvailableNow() jobb är det mest kostnadseffektiva strömningsmönstret för serverlös beräkning när svarstid på minutnivå är acceptabel. Beräkningen startar i sekunder, kör batchen och stängs av.

Hanterad inmatning

Om källan är ett SaaS-program eller en driftdatabas använder du Lakeflow Connect i stället för att skriva kod för strukturerad direktuppspelning. Lakeflow Connect kör serverlösa inläsningspipelines för anslutningar som Salesforce, Workday, SQL Server CDC och PostgreSQL CDC. Se Hanterade kontakter i Lakeflow Connect.

Den här sökvägen är rätt svar när:

  • Det finns en anslutning för din källa.
  • Du vill ha en hanterad pipeline i stället för anpassad kod.
  • Du behöver schemautveckling, ursprung och övervakning direkt.

SQL-hanterad inkrementell databearbetning

För team som i första hand arbetar med SQL använder du strömningstabeller för SQL-baserade streamingarbetsbelastningar. Du kan definiera strömmande tabeller i Lakeflow Spark Declarative Pipelines eller som fristående strömmande tabeller.

För fristående direktuppspelningstabeller som skapats med SQL-instruktionen CREATE OR REFRESH STREAMING TABLE börjar den första datauppdateringen och populationen omedelbart. En dedikerad serverlös pipeline skapas och hanteras automatiskt av systemet för varje strömmande tabell.

Om du behöver batch-semantikfrågeresultat med hanterad uppdatering använder du materialiserade vyer i stället. Se även Materialiserade vyer.

Arbetslaster som inte är streamingspipeliner

En arbetsbelastning som behöver ha en långvarig anslutning, lyssna på en port eller svara på inkommande HTTP-begäranden är inte en direktuppspelningspipeline. det är ett program. Kör inte dessa arbetsbelastningar på ett serverlöst jobb. Rätt Databricks-alternativ är:

  • Långvariga tjänster som behöver en beständig anslutning eller HTTP-slutpunkt: Skapa tjänsten med Databricks-appar. Databricks Apps är den serverlösa plattformen för att hantera anpassade program på Azure Databricks, inklusive FastAPI, Flask, Streamlit, Dash, Gradio, Node.jsoch Shiny-appar. Se Databricks-appar.
  • Inkommande webhooks eller händelselyssnare: Exponera en HTTP-slutpunkt i Databricks-appar eller avsluta webhooken i en extern tjänst och skriva händelser till molnlagring eller en meddelandebuss och hämta dem sedan med en serverlös pipeline för direktuppspelning.
  • Utbyte av anpassad token eller autentiseringsuppgifter: Använd tjänstens huvudnamn med OAuth eller anropa Databricks REST-API:er från en app. Streamingpipelines lagrar inte användarsessioner eller anpassad tokenstatus.

Om du bedömer om din arbetsbelastning passar i en streamingpipeline, bör du fråga dig:

  • Läser arbetsbelastningen från en obundna datakälla och skriver till en mottagare? Om ja är det en pipeline för direktuppspelning.
  • Behöver arbetsbelastningen hålla en anslutning öppen till en klient? Om ja, är det ett program; använda Databricks Apps.

Limitations

Serverlös beräkning medför följande begränsningar för strömning. Ingen av dem förhindrar arbetsbelastningarna ovan när de paras ihop med rätt produkt.

  • Tidsbaserade utlösare för Structured Streaming (Trigger.ProcessingTime(interval) och Trigger.Continuous(interval)) stöds inte i serverlösa anteckningsböcker eller jobb. Använd Lakeflow Spark deklarativa datapipelines i kontinuerligt läge för alltid aktiva strömmar, eller Trigger.AvailableNow() för triggade körningar. Se Begränsningar för direktuppspelning.
  • Strömningsfrågor utan en explicit utlösare misslyckas med INFINITE_STREAMING_TRIGGER_NOT_SUPPORTED. Apache Spark har som standardvärde Trigger.ProcessingTime("0 seconds"), vilket inte stöds för serverlös datorkapacitet. Ställ alltid in Trigger.AvailableNow() för varje strömningsfråga, eller använd Lakeflow Spark Declarative Pipelines i kontinuerligt läge.
  • Alla begränsningar för direktuppspelning i standardåtkomstläge gäller även för serverlös beräkning. Se Begränsningar för direktuppspelning.

Nästa steg