Streamen met serverloze rekenkracht

Op deze pagina wordt beschreven hoe u de juiste configuratie kiest voor serverloze streamingworkloads op Azure Databricks, waaronder continue pijplijnen, incrementele opname en beheerde connectors. Het kiezen van de juiste configuratie is afhankelijk van de bron-, shape- en latentiebehoeften van de stream.

Wat telt als een streamingworkload

Een streamingworkload leest niet-gebonden gegevens uit een bron (zoals opslag van cloudobjecten, een berichtenbus of een wijzigingenfeed) en schrijft stapsgewijs naar een sink. Azure Databricks ondersteunt twee patronen van streamingworkloads:

  • Doorlopend: Een pijplijn die ononderbroken draait en nieuwe gegevens verwerkt zodra die binnenkomen. Latentie wordt gemeten in seconden.
  • Incrementeel (ook wel triggergestuurd genoemd): Een pijplijn die volgens een planning of door een trigger wordt uitgevoerd, alle gegevens verwerkt die sinds de laatste uitvoering zijn binnengekomen, en stopt. Latentie wordt in minuten gemeten.

Sommige workloads lijken streamingpijplijnen te zijn, maar zijn technisch geen pijplijnen. Voorbeelden hiervan zijn een service waarin een websocket is geopend om te luisteren naar gebeurtenissen, een chattoepassing die een permanente verbinding per gebruiker onderhoudt of een webhookontvanger die binnenkomende HTTP-aanvragen verwerkt. Dit zijn toepassingen, geen streaming-pijplijnen. Zie Workloads die geen streamingpijplijnen zijn voor de juiste serverloze optie voor deze workloads.

De juiste streamingconfiguratie kiezen

In deze tabel worden gebruiksvoorbeelden toegewezen aan de serverloze configuraties die het beste bij deze configuraties passen. De secties die op deze pagina volgen, bevatten meer informatie over deze aanbevelingen.

Gebruiksituatie Aanbevolen configuratie Waarom
Continue streaming ETL of transformaties met lage latentie Lakeflow Spark-declaratieve pijplijnen in continue modus Continue modus is ontworpen voor permanent actieve streams. Stream pipelining voert microbatches gelijktijdig uit, waardoor de doorvoer en latentie worden verbeterd. De beheerde status zorgt ervoor dat herstel automatisch wordt uitgevoerd.
Incrementele ingestie uit cloudopslag Gebruik automatisch laden in Lakeflow Spark-declaratieve pijplijnen (voor lage latentie) of in een serverloze taak met Trigger.AvailableNow() (als lagere latentie acceptabel is). Auto Loader houdt nieuwe bestanden efficiënt bij. Trigger.AvailableNow() verwerkt de backlog en wordt vervolgens afgesloten, wat past bij een gepland of on-demand uitvoeringsritme.
Beheerde ingestie vanuit SaaS-bronnen of CDC uit databases Standaard connectors in Lakeflow Connect Volledig beheerde connectors met serverloze opnamepijplijnen. Er is geen code vereist voor ondersteunde bronnen.
SQL streamen via Delta-tabellen Streamingtabellen SQL-native incrementele verwerking voor append-georiënteerde bronnen, met beheerde pijplijnen en verversing.
Periodieke microbatchverwerking in een notebook of taak Serverloze taak met Trigger.AvailableNow() Kostenefficiënt wanneer versheid op minuutniveau voldoende is. Serverloze berekeningen worden snel gestart en afgesloten wanneer de batch is voltooid.

Doorlopend streamen

Gebruik declaratieve pijplijnen van Lakeflow Spark in continue modus voor continue streaming op serverloze berekeningen. De pijplijn blijft actief, verwerkt records zodra ze binnenkomen en herstelt automatisch van fouten.

Ga als volgende te werk om een continue stroom te configureren:

Tip

Stream pipelining is standaard ingeschakeld in serverloze Lakeflow Spark-declaratieve pijplijnen. Microbatches worden parallel uitgevoerd in plaats van sequentieel, wat de doorvoer voor invoerintensieve streams verbetert.

Triggers voor gestructureerd streamen op basis van tijd, zoals Trigger.ProcessingTime(interval) enTrigger.Continuous(interval), zijn niet beschikbaar in serverloze notebooks of taken. Gebruik declaratieve Pijplijnen van Lakeflow Spark in continue modus voor het always-on-patroon. Zie Beperkingen voor streaming. Trigger.Once() wordt ondersteund, maar afgeschaft: bestaande query's migreren naar Trigger.AvailableNow().

Incrementele en geactiveerde streaming

Voor incrementeel streamen voert u Structured Streaming uit met Trigger.AvailableNow() een serverloze taak. Elke uitvoering verwerkt alle gegevens die sinds het laatste controlepunt zijn binnengekomen en wordt daarna beëindigd.

Een serverloze taak configureren met incrementele streaming:

In het volgende voorbeeld worden nieuwe bestanden uit cloudopslag (source_path) gelezen met Auto Loader, worden alle gegevens verwerkt die beschikbaar zijn op het moment van de uitvoering en naar een Delta-tabel geschreven:

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

Een geplande Trigger.AvailableNow() taak is het meest rendabele streamingpatroon op serverloze berekeningen wanneer latentie op minuutniveau acceptabel is. Compute begint in seconden, voert de batch uit en wordt afgesloten.

Beheerde opname

Als de bron een SaaS-toepassing of een operationele database is, gebruikt u Lakeflow Connect in plaats van gestructureerde streaming-code te schrijven. Lakeflow Connect voert serverloze opnamepijplijnen uit voor connectors zoals Salesforce, Workday, SQL Server CDC en PostgreSQL CDC. Zie Managed connectors in Lakeflow Connect.

Dit pad is het juiste antwoord wanneer:

  • Er bestaat een connector voor uw bron.
  • U wilt een beheerde pijplijn in plaats van aangepaste code.
  • U hebt schema-evolutie, data-lineage en monitoring standaard nodig.

Incrementele gegevensverwerking die door SQL wordt beheerd

Voor SQL-first-teams gebruikt u streamingtabellen voor sql-systeemeigen streamingworkloads. U kunt streamingtabellen definiëren in declaratieve pijplijnen van Lakeflow Spark of als zelfstandige streamingtabellen.

Voor zelfstandige streamingtabellen die zijn gemaakt met de CREATE OR REFRESH STREAMING TABLE SQL-instructie, begint de eerste gegevensvernieuwing en de populatie onmiddellijk. Er wordt automatisch een toegewezen serverloze pijplijn gemaakt en beheerd door het systeem voor elke streamingtabel.

Als u queryresultaten met batchsemantiek en beheerd verversen nodig hebt, gebruik dan in plaats daarvan gematerialiseerde weergaven. Bekijk gematerialiseerde weergaven.

Workloads die geen streaming-pipelines zijn

Een workload die een langdurige verbinding moet bevatten, op een poort moet luisteren of moet reageren op binnenkomende HTTP-aanvragen, is geen streamingpijplijn; het is een toepassing. Voer deze workloads niet uit op een serverloze taak. De juiste Databricks-opties zijn:

  • Langlopende services die een permanente verbinding of EEN HTTP-eindpunt nodig hebben: bouw de service met Databricks-apps. Databricks Apps is het serverloze platform voor het hosten van aangepaste toepassingen op Azure Databricks, waaronder FastAPI-, Flask-, Streamlit-, Dash-, Gradio-, Node.js- en Shiny-apps. Zie Databricks-apps.
  • Binnenkomende webhooks of gebeurtenislisteners: maak een HTTP-eindpunt beschikbaar in Databricks-apps of beëindig de webhook in een externe service en schrijf gebeurtenissen naar de cloudopslag of een berichtenbus en haal deze vervolgens op met een serverloze streamingpijplijn.
  • Aangepaste token- of referentieuitwisseling: gebruik service-principals met OAuth of roep de Databricks REST API's aan vanuit een app. Streamingpijplijnen bevatten geen sessies per gebruiker of aangepaste tokenstatus.

Als u evalueert of uw workload past bij een streaming-pijplijn, vraagt u het volgende:

  • Leest de workload uit een onbegrensde gegevensbron en schrijft deze weg naar een bestemming? Zo ja, dan is het een streaming-pijplijn.
  • Moet de workload een verbinding met een cliënt openhouden? Zo ja, dan is het een toepassing; Databricks-apps gebruiken.

Limitations

Serverloze rekenkracht legt de volgende streamingbeperkingen op. Geen daarvan voorkomt de bovenstaande workloads in combinatie met het juiste product.

  • Triggers voor gestructureerd streamen op basis van tijd (Trigger.ProcessingTime(interval) en Trigger.Continuous(interval)) worden niet ondersteund in serverloze notebooks of taken. Gebruik Lakeflow Spark Declarative Pipelines in de continue modus voor altijd actieve streams, of Trigger.AvailableNow() voor triggergestuurde uitvoeringen. Zie Beperkingen voor streaming.
  • Streamingquery’s zonder een expliciete trigger falen met INFINITE_STREAMING_TRIGGER_NOT_SUPPORTED. Apache Spark is standaard ingesteld op Trigger.ProcessingTime("0 seconds"), wat niet wordt ondersteund op serverloze compute. Stel Trigger.AvailableNow() altijd in voor elke streamingquery, of gebruik Lakeflow Spark Declarative Pipelines in continue modus.
  • Alle beperkingen voor streaming in de standaardtoegangsmodus zijn ook van toepassing op serverloze berekeningen. Zie Beperkingen voor streaming.

Volgende stappen