Data flow graphs in Azure IoT-bewerkingen

Een dataflowgrafiek is een configureerbare pijplijn die data verwerkt terwijl deze door Azure IoT-bewerkingen gaat. Een standaard datastroom volgt een vaste verrijking, filter en map-sequentie, maar een datastroomgrafiek laat je transformaties in willekeurige volgorde samenstellen, parallelle paden vertakken en data aggregeren over tijdsvensters.

De DataflowGraph aangepaste Kubernetes-resource definieert een datastroomgrafiek. Binnen de bron verbind je bronnen, transformaties en bestemmingen om verwerkingspijplijnen te bouwen die aansluiten bij jouw situatie.

Belangrijk

Gegevensstroomgrafieken ondersteunen momenteel alleen MQTT-, Kafka- en OpenTelemetry-eindpunten. Andere eindpunttypen, zoals Data Lake, Microsoft Fabric OneLake, Azure Data Explorer en Lokale opslag, worden niet ondersteund.

Gegevensstromen versus gegevensstroomgrafieken

Azure IoT-bewerkingen biedt twee manieren om gegevens in een pijplijn te verwerken:

Vermogen Gegevensstromen Gegevensstroomgrafieken
Pijplijnvorm Opgelost: verrijken, filteren, kaart Flexibel: elke volgorde, vertakking, samenvoeging
Transformatietypen Kaart, filter, verrijken Kaarten, filteren, vertakken, aankoppelen, venster, gashendel geven, verrijken
Aggregatie op basis van tijd Niet beschikbaar Venstertransformaties met vallende vensters
Voorwaardelijke routering Niet beschikbaar Transformaties vertakken en samenvoegen
Eindpuntondersteuning Alle eindpunttypen Alleen MQTT-, Kafka- en OpenTelemetry

Voor nieuwe projecten die gebruikmaken van ondersteunde eindpunttypen raden we gegevensstroomgrafieken aan. Gegevensstromen blijven volledig ondersteund voor alle scenario's en ondersteunen het volledige scala aan eindpunttypen.

Beschikbare transformaties

Elke transformatie is een vooraf gebouwde verwerkingsstap die je configureert met regels en een keten met andere transformaties binnen een DataflowGraph resource.

Transformeren Artifact Description
Kaart azureiotoperations/graph-dataflow-map:1.0.0 Hernoem, herstructureer, bereken en kopieer velden.
Filter azureiotoperations/graph-dataflow-filter:1.0.0 Berichten verwijderen die overeenkomen met een voorwaarde.
Filiaal azureiotoperations/graph-dataflow-branch:1.0.0 Routeer elk bericht naar een true of false pad op basis van een voorwaarde.
Concatenate azureiotoperations/graph-dataflow-concatenate:1.0.0 Voeg twee of meer paden weer samen in één pad.
Venster azureiotoperations/graph-dataflow-window:1.0.0 Verzamel berichten gedurende een tijdsinterval en aggregeren.
Throttle azureiotoperations/graph-dataflow-throttle:1.0.0 Beperk de berichtsnelheid per MQTT-themapatroon.

Alle transformaties delen een expressietaal voor operators, functies en veldverwijzingen. U kunt berichten ook verrijken met externe gegevens uit een statusarchief in kaart-, filter- en vertakkingstransformaties.

Tip

Expressies gebruiken positionele variabelen, dus $1 is de eerste invoer, $2 is de tweede, enzovoort. De Expressions-referentie vermeldt ingebouwde functies zoals cToF en behandelt elke operator, functie en metadataveld dat beschikbaar is voor transformaties.

Hoe transformaties samengesteld worden in een datastroomgrafiek

Transformaties verbinden in volgorde binnen een DataflowGraph resource: Bron > Transformatie A > Transformatie B > ... > Bestemming.

Vertakkings-transformaties splitsen de stroom in parallelle paden, en verbindings-transformaties voegen ze weer samen.

U kunt elk willekeurig aantal transformaties in elke volgorde koppelen. Een pijplijn met één enkele mapping is net zo geldig als een pijplijn die filtert, vertakt, elk pad anders toewijst, samenvoegt en vervolgens aggregeert in een tijdvenster.

Hoe de configuratie van datastroomgrafieken werkt

Elke transformatie in een dataflowgrafiek verwijst naar een vooraf gebouwd artefact dat uit een containerregister is gehaald. U configureert de transformatie door regels door te geven als JSON via de configuration sectie van de grafiekresource.

Wanneer je Azure IoT-bewerkingen uitrolt, maakt het automatisch een standaard register-endpoint aan dat default wijst naar mcr.microsoft.com. De ingebouwde transformaties gebruiken dit eindpunt om artefacten op te halen uit Microsoft Container Registry. Je hebt geen extra registerinstallatie nodig.

Een datastroomgrafiekresource definieert drie soorten elementen—een bron, één of meer transformaties (elk met nodeType: Graph), en een bestemming—en een set die nodeConnections beschrijft hoe data tussen deze elementen stroomt. Elke transformatie configuration geeft zijn regels door als een JSON-string onder de rules sleutel.

Voor een volledig, uitvoerbaar voorbeeld dat temperatuurgegevens leest, Celsius omzet naar Fahrenheit met een maptransformatie en het resultaat publiceert—in de Operations-ervaring, Azure CLI, Bicep en Kubernetes—zie Create a data flow graph. In de artikelen die volgen, richten voorbeelden zich op de transformatieregels zelf.

Configureer schema's op knooppuntverbindingen

Dataflowgrafieken behandelen schema's anders dan datastromen. In plaats van het schema in te stellen op de bron of transformatie, configureert u schema's op de knooppuntverbindingen tussen knooppunten in de grafiek. Branch- en filtertransformaties kunnen optioneel runtime-data valideren tegen schema's die aan knooppuntverbindingen zijn gekoppeld.

Elke invoer in de nodeConnections array kan een schema aan de from zijkant van een verbinding bevatten. Dit schema beschrijft het verwachte formaat van de data die tussen die twee knooppunten stroomt:

nodeConnections: [
  {
    from: {
      name: 'source'
      schema: {
        schemaRef: 'aio-sr://my-namespace/sensor-data:1'
        serializationFormat: 'Json'
      }
    }
    to: {
      name: 'transform'
    }
  }
]

De schemaRef waarde gebruikt het formaat aio-sr://<namespace>/<name>:<version> en wijst naar een schema dat is opgeslagen in het schemaregister. Omdat datastroomgrafieken alleen MQTT-, Kafka- en OpenTelemetrie-eindpunten ondersteunen, is Jsonhet ondersteunde serialisatieformaat .

De volgende tabel vat samen hoe schemaconfiguratie verschilt tussen datastromen en datastroomgrafieken:

Aspect Gegevensstromen Gegevensstroomgrafieken
Schemalocatie Bij bron (sourceSettings.schemaRef) en transformatie (builtInTransformationSettings.schemaRef) Op knooppuntverbindingen (nodeConnections[].from.schema)
Ondersteunde doelindelingen JSON, Parquet, Delta JSON
Runtimevalidatie Niet ondersteund voor bronschema's Optioneel op knooppuntverbindingen via branch- en filtertransformaties

Note

Voor datastroomgrafieken is JSON momenteel het enige ondersteunde bestemmingsformaat, ondanks de formaten die in de REST API-referentiedocumentatie worden vermeld.

Voor definities van berichtschema's, formaten en hoe je schema's uploadt, zie Understand message schemas.

Ingebouwde transformaties versus WASM-transformaties

Gegevensstroomgrafieken ondersteunen twee soorten transformaties:

  • Ingebouwde transformaties worden vooraf gebouwd door Microsoft (map, filter, branch, concatenate, window, throttle). U configureert ze met regels. Er is geen codering vereist.
  • WASM-transformaties zijn aangepaste WebAssembly-modules die ontwikkelaars bouwen en implementeren. Gebruik deze wanneer u logica nodig hebt die niet door de ingebouwde transformaties wordt behandeld.

Beide soorten transformaties draaien binnen dezelfde DataflowGraph bron, en je kunt ze in één enkele pijplijn mengen. Zie WASM-transformaties gebruiken in gegevensstroomgrafieken voor meer informatie over het bouwen en implementeren van aangepaste transformaties.

Foutafhandeling in datastroomgrafieken

Wanneer een transformatie een fout tegenkomt tijdens het verwerken van een bericht (bijvoorbeeld een ontbrekend veld of een ongeldige expressie), laat de transformatie het bericht vallen en registreert een foutmelding. De pijplijn blijft de volgende berichten verwerken.

Veelvoorkomende oorzaken van verwerkingsfouten:

  • Een veld waarnaar in een regel inputs wordt verwezen, bestaat niet in het bericht.
  • Een filter- of vertakkingsexpressie retourneert een niet-Booleaanse waarde.
  • Een expressie verwijst naar een incompatibel datatype (bijvoorbeeld een JSON-object in de rekenkunde).
  • Een staatsarchief dat wordt gebruikt voor verrijking is onbereikbaar.

Als u wilt controleren op verwerkingsfouten, controleert u de podlogboeken voor de gegevensstroomgrafiek of gebruikt u de eindpunten voor metrische gegevens. Zie Waarneembaarheid en bewaking configureren voor meer informatie.

Schaalbaarheidsbeperking voor statusbehoudende grafen

Belangrijk

Raam- en gashendeltransformaties zijn stateful. Elke instantie behoudt zijn eigen staat en instanties delen die toestand niet met elkaar. Wanneer het aantal instanties in het dataflowprofiel groter is dan één, verdelen gedeelde abonnementen berichten over instanties , zodat elke instantie slechts een deelverzameling van de berichten ziet. Een windowtransform berekent vervolgens aggregaties zoals gemiddelden, sommen en tellingen over een gedeeltelijke dataset, en een throttle-transformatie handhaaft de geconfigureerde snelheidslimiet onafhankelijk in elke instantie in plaats van over de hele pijplijn.

Stel het aantal instanties van het dataflowprofiel in op 1 voor elke datastroomgrafiek die een window- of throttle-transformatie gebruikt. Stateless dataflow-grafieken die alleen map-, filter-, branch- en concatenate-transformaties gebruiken, kunnen veilig hogere instance-tellingen gebruiken om de doorvoersnelheid te verhogen.

Prestatierichtlijnen voor datastroomgrafieken

Elke transformatie in de pijplijn voegt verwerkingsoverhead toe. Houd rekening met deze richtlijnen:

  • Geef de voorkeur aan minder transformaties met meer regels. Als u veel transformatieregels hebt die op dezelfde structuur werken, voegt u deze samen in één verzameltransformatie in plaats van afzonderlijke transformaties te maken voor elke regel.
  • Gebruik meerdere transformaties wanneer de logica uniek is. Afzonderlijke transformaties zijn logisch wanneer verschillende verwerkingsstappen fundamenteel verschillen (filteren versus transformatie versus aggregatie).
  • Houd gerelateerde regels bij elkaar. Eén transformatie kan veld hernoeming, herstructurering, berekende velden en metagegevenstransformaties in één keer verwerken.