Garanties voor gebeurtenislevering (Azure Stream Analytics)

Azure Stream Analytics-querytaal breidt de SQL-syntaxis uit om complexe berekeningen voor stromen van gebeurtenissen mogelijk te maken. Met Stream Analytics zijn er enkele concepten met betrekking tot gebeurtenislevering die het waard zijn om te bespreken:

  • Exact één keer verwerken
  • Exact één keer geleverd
  • Records dupliceren

Naast deze concepten die hieronder worden beschreven, is het belangrijk om de startoptie van een taak te overwegen om ervoor te zorgen dat er geen gegevensverlies kan optreden.

Exactly-once-verwerking

Exactly-once-verwerkingsgarantie betekent dat het systeem altijd dezelfde resultaten retourneert op basis van een set invoerwaarden. Dit is zeer belangrijk voor de herhaalbaarheid en geldt zelfs in het geval van opnieuw opstarten van de taak of voor meerdere taken die parallel worden uitgevoerd op dezelfde invoer. Azure Stream Analytics garandeert exact één verwerking.

Exactly-once levering

Exactly-once-leveringsgarantie betekent dat alle uitvoer van exactly-once-verwerking precies één keer aan de uitvoersink wordt geleverd, zodat er geen dubbele uitvoer is. Hiervoor moeten transactionele mogelijkheden op de uitvoeradapter worden bereikt.

Azure Stream Analytics garandeert ten minste eenmaal levering aan uitvoersinks, wat garandeert dat alle resultaten worden uitgevoerd, maar dat er dubbele resultaten kunnen optreden. Exactly-once-levering kan echter worden bereikt met verschillende uitvoerwaarden, zoals Azure Cosmos DB of Azure SQL.

Records dupliceren

Vanwege de garantie voor ten minste eenmaal leveren kunnen er, wanneer een Stream Analytics-taak wordt uitgevoerd, af en toe dubbele records worden opgemerkt in de uitvoergegevens. Deze dubbele records worden verwacht omdat uitvoeradapters van Azure Stream Analytics de uitvoer gebeurtenissen niet transactioneel schrijven. Dit scenario met dubbele records kan het gevolg zijn als een van de volgende omstandigheden zich voordoet:

  • Het Azure-exemplaar wordt bijgewerkt terwijl de taak wordt uitgevoerd
  • De Stream Analytics-taak wordt bijgewerkt of er treedt een probleem op met de connectiviteit of betrouwbaarheid van de taakuitvoer
  • Er is een storing opgetreden in het Azure-exemplaar waarop de taak wordt uitgevoerd
  • Stream Analytics-taak wordt gestart met de optie wanneer de laatste is gestopt

De downstreamgebruiker van de uitvoer gebeurtenissen moet de gebeurtenissen ontdubbelen met behulp van de logische identiteit van de gebeurtenissen. Als u bijvoorbeeld gebeurtenissen op groepen in een tumblingvenster samenvoegt, is de logische identiteit van de gebeurtenis de groepen en de eindtijd van het tumblingvenster. Als u een passthrough-query uitvoert, moet u mogelijk een unieke id voor de gebeurtenis hebben om dedupe te kunnen ontdubbelen.

Uitvoer die exact-once-levering ondersteunt met Azure Stream Analytics

Azure Cosmos DB

Met Behulp van Azure Cosmos DB garandeert Azure Stream Analytics exactly-once levering. Omdat Azure Stream Analytics gebruikmaakt van upsert, hoeft de gebruiker geen actie te ondernemen. Zie meer informatie over Azure Stream Analytics-uitvoer naar Azure Cosmos DB.

SQL

Wanneer u SQL-uitvoer gebruikt, kunnen gebruikers exactly-once-levering bereiken als aan de volgende vereisten wordt voldaan:

  • alle uitvoerstreamingsevenementen hebben een natuurlijke sleutel, d.w.w. dat ze uniek kunnen worden geïdentificeerd door een veld of een combinatie van velden.
  • de uitvoer-SQL-tabel heeft een unieke beperking (of primaire sleutel) die is gemaakt met behulp van de natuurlijke sleutel van de uitvoergebeurtenissen.

Dit is voldoende om duplicaten te voorkomen, omdat de SQL-uitvoer alle beperkingen in de tabel in acht neemt door gebeurtenissen over te slaan die een unieke beperkingsschending veroorzaken.

Azure Table

Alle entiteiten in een Azure Storage-tabel worden uniek geïdentificeerd door de samenvoeging van de RowKey velden en PartitionKey . Met Azure Stream Analytics worden entiteiten upsert, zodat de waarde van een tabelentiteit de meest recente uitvoer-gebeurtenis is met de bijbehorende RowKey/PartitionKey combinatie. Als u daarom exactly-once-levering wilt bereiken, moet u ervoor zorgen dat elke uitvoergebeurtenis een unieke RowKey/PartitionKey combinatie heeft. Als dit gebeurt, worden eerdere versies overschreven door dubbele gebeurtenissen. (Het door het systeem gedefinieerde Timestamp veld, de laatste wijzigingstijd voor de entiteit, wordt in dit geval nog steeds gewijzigd.)

Zie ook

Tijdbeheer