Delen via


Leveringsgaranties voor evenementen

✅ Azure Stream Analytics

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

  • Exacte eenmalige verwerking
  • Precies één keer levering
  • Duplicate records

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

Exactly-once processing

Exactly-once verwerkingsgarantie betekent dat het systeem bij een set invoer altijd dezelfde resultaten retourneert. Dit is erg belangrijk voor herhaalbaarheid en is zelfs van toepassing bij het opnieuw opstarten van de taak, of bij meerdere taken die parallel worden uitgevoerd op dezelfde invoer. Azure Stream Analytics garandeert precies eenmaal verwerking.

Exactly-once delivery

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

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

Duplicate records

Als gevolg van ten minste één leveringsgarantie, wanneer een Stream Analytics-taak wordt uitgevoerd, kunnen dubbele records af en toe worden opgemerkt in de uitvoergegevens. Deze dubbele records worden verwacht omdat azure Stream Analytics-uitvoeradapters de uitvoer gebeurtenissen niet transactioneel schrijven. Dit scenario 'dubbele record' kan resulteren als een van de volgende voorwaarden optreedt:

  • 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
  • Het Azure-exemplaar waarop de taak wordt uitgevoerd, heeft een storing
  • Stream Analytics-taak wordt gestart met de optie voor het laatst gestopt

De downstreamgebruiker van de uitvoer gebeurtenissen moet de gebeurtenissen ontdubbelen met behulp van een logische identiteit van de gebeurtenissen. Als u bijvoorbeeld gebeurtenissen samenvoegt op groepen in een tumblingvenster, 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 meenemen 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 exact één keer levering. Omdat Azure Stream Analytics upsert gebruikt, is er geen actie nodig voor de gebruiker. Zie meer informatie over Azure Stream Analytics-uitvoer naar Azure Cosmos DB.

SQL

Wanneer u SQL-uitvoer gebruikt, kunnen gebruikers exact één levering bereiken als aan de volgende vereisten wordt voldaan:

  • alle uitvoerstreamingsevenementen hebben een natuurlijke sleutel, d.w. zijn uniek identificeerbaar 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 eventuele beperkingen in de tabel naslaat door gebeurtenissen te overslaan die een schending van een unieke beperking veroorzaken.

Azure Table

Alle entiteiten in een Azure Storage-tabel worden uniek geïdentificeerd door de samenvoeging van de RowKey en PartitionKey velden. Azure Stream Analytics-upserts-entiteiten, dus de waarde van een tabelentiteit is de meest recente uitvoer gebeurtenis met de bijbehorende RowKey/PartitionKey combinatie. Zorg er daarom voor dat elke uitvoergebeurtenis een unieke RowKey/PartitionKey combinatie heeft om exact één keer te leveren. Als dit gebeurt, worden eerdere versies door dubbele gebeurtenissen overschreven. (Het door het systeem gedefinieerde Timestamp veld, de laatste wijzigingstijd voor de entiteit, wordt in dit geval nog steeds gewijzigd.)

See Also

Time Management