Dela via


Garantier för händelseleverans (Azure Stream Analytics)

Azure Stream Analytics-frågespråket utökar SQL-syntaxen för att möjliggöra komplexa beräkningar över händelseströmmar. Med Stream Analytics finns det några begrepp som är relaterade till händelseleverans som är värda att diskutera:

  • Bearbetning exakt en gång
  • Leverans exakt en gång
  • Duplicera poster

Förutom de här begreppen som beskrivs nedan är det viktigt att överväga startalternativet för ett jobb för att se till att ingen dataförlust kan inträffa.

Bearbetning exakt en gång

Exakt en bearbetningsgaranti innebär att systemet alltid returnerar samma resultat med tanke på en uppsättning indata. Detta är mycket viktigt för repeterbarhet och gäller även vid omstart av jobbet, eller för flera jobb som körs parallellt på samma indata. Azure Stream Analytics garanterar bearbetning exakt en gång.

Leverans exakt en gång

Leveransgaranti exakt en gång innebär att alla utdata från bearbetning exakt en gång levereras till utdatamottagaren exakt en gång, så det finns inga duplicerade utdata. Detta kräver att transaktionsfunktioner på utdataadaptern uppnås.

Azure Stream Analytics garanterar leverans till utdatamottagare minst en gång, vilket garanterar att alla resultat matas ut, men duplicerade resultat kan uppstå. Leverans exakt en gång kan dock uppnås med flera utdata, till exempel Azure Cosmos DB eller Azure SQL.

Duplicera poster

På grund av leveransgaranti minst en gång kan dubbletter av poster ibland märkas i utdata när ett Stream Analytics-jobb körs. Dessa dubblettposter förväntas eftersom Azure Stream Analytics-utdatakort inte skriver utdatahändelserna transaktionsmässigt. Det här scenariot med dubblettposter kan uppstå om något av följande villkor inträffar:

  • Azure-instansen uppgraderas medan jobbet körs
  • Stream Analytics-jobbet uppgraderas eller så uppstår ett problem med anslutningen eller tillförlitligheten för jobbutdata
  • Azure-instansen som kör jobbet har ett avbrott
  • Stream Analytics-jobbet startas med alternativet när det senast stoppades

Den underordnade konsumenten av utdatahändelserna måste deduplicering av händelser med hjälp av logisk identitet för händelserna. Om du till exempel aggregerar händelser efter grupper i ett rullande fönster är händelsens logiska identitet grupperna och sluttiden för rullande fönster. Om du kör en genomströmningsfråga kan du behöva ha med dig ett unikt ID för händelsen för att deduplicering ska fungera.

Utdata som stöder leverans exakt en gång med Azure Stream Analytics

Azure Cosmos DB

Med Azure Cosmos DB garanterar Azure Stream Analytics leverans exakt en gång. Eftersom Azure Stream Analytics använder upsert krävs ingen åtgärd av användaren. Läs mer om Azure Stream Analytics-utdata till Azure Cosmos DB.

SQL

När du använder SQL-utdata kan användarna uppnå leverans exakt en gång om följande krav är uppfyllda:

  • alla strömmande utdatahändelser har en naturlig nyckel, d.v.s. är unikt identifierbara antingen av ett fält eller en kombination av fält.
  • SQL-utdatatabellen har en unik begränsning (eller primärnyckel) som skapats med hjälp av den naturliga nyckeln för utdatahändelserna.

Detta är tillräckligt för att undvika dubbletter eftersom SQL-utdata respekterar eventuella begränsningar som finns i tabellen genom att hoppa över händelser som orsakar en unik begränsningsöverträdelse.

Azure-tabell

Alla entiteter i en Azure Storage-tabell identifieras unikt genom sammanfogningen av fälten RowKey och PartitionKey . Azure Stream Analytics uppdaterar entiteter, så värdet för en tabellentitet blir den senaste utdatahändelsen med motsvarande RowKey/PartitionKey kombination. För att uppnå leverans exakt en gång bör du därför se till att varje utdatahändelse har en unik RowKey/PartitionKey kombination. Om detta görs skriver dubbletthändelser över tidigare versioner. (Det systemdefinierade Timestamp fältet, som är den senaste ändringstiden för entiteten, ändras fortfarande i det här fallet.)

Se även

Tidshantering