Ereignisübermittlungsgarantien (Azure Stream Analytics)
Die Azure Stream Analytics-Abfragesprache erweitert die SQL-Syntax, um komplexe Berechnungen für Ereignisströme zu ermöglichen. Mit Stream Analytics gibt es einige Konzepte im Zusammenhang mit der Ereignisbereitstellung, die besprochen werden müssen:
- Genau einmal verarbeitet
- Exakt eine Übermittlung
- Doppelte Datensätze
Zusätzlich zu diesen unten beschriebenen Konzepten ist es wichtig, die Startoption eines Auftrags zu berücksichtigen, um sicherzustellen, dass keine Datenverluste auftreten können.
Exactly-Once-Verarbeitung
Die Garantie für die verarbeitungsgenaue Verarbeitung bedeutet, dass das System bei einer Reihe von Eingaben immer die gleichen Ergebnisse zurückgibt. Dies ist sehr wichtig für die Wiederholbarkeit und gilt auch für den Fall eines Neustarts des Auftrags oder für mehrere Aufträge, die parallel mit derselben Eingabe ausgeführt werden. Azure Stream Analytics garantiert die Verarbeitung genau einmal.
Genau einmal geliefert
Die Garantie für die genaue Einmalbereitstellung bedeutet, dass alle Ausgaben aus der Genau einmal-Verarbeitung genau einmal an die Ausgabesenke übermittelt werden, sodass keine doppelte Ausgabe vorhanden ist. Hierfür müssen Transaktionsfunktionen für den Ausgabeadapter erreicht werden.
Azure Stream Analytics garantiert die mindestens einmalige Übermittlung an Ausgabesenken, wodurch sichergestellt wird, dass alle Ergebnisse ausgegeben werden, es können jedoch doppelte Ergebnisse auftreten. Die genaue Einmalbereitstellung kann jedoch mit mehreren Ausgaben wie Azure Cosmos DB oder Azure SQL erreicht werden.
Doppelte Datensätze
Aufgrund der Mindestens einmal-Übermittlungsgarantie werden bei Ausführung eines Stream Analytics-Auftrags gelegentlich doppelte Datensätze in den Ausgabedaten angezeigt. Diese doppelten Datensätze werden erwartet, da Azure Stream Analytics-Ausgabeadapter die Ausgabeereignisse nicht transaktional schreiben. Dieses Szenario mit doppelten Datensätzen kann auftreten, wenn eine der folgenden Bedingungen auftritt:
- Der Azure-instance wird aktualisiert, während der Auftrag ausgeführt wird.
- Der Stream Analytics-Auftrag wird aktualisiert, oder es tritt ein Problem mit der Konnektivität oder Zuverlässigkeit der Auftragsausgabe auf.
- Der Azure-instance, der den Auftrag ausführt, hat einen Ausfall.
- Stream Analytics-Auftrag wird mit der Option wann zuletzt beendet gestartet
Der Downstreamconsumer der Ausgabeereignisse muss die Ereignisse mithilfe der logischen Identität der Ereignisse dedupliieren. Wenn Sie z. B. Ereignisse nach Gruppen in einem rollierenden Fenster aggregieren, ist die logische Identität des Ereignisses die Gruppen und die Endzeit des rollierenden Fensters. Wenn Sie eine Passthrough-Abfrage ausführen, müssen Sie möglicherweise eine eindeutige ID für das Ereignis tragen, um sie zu dedupliieren.
Ausgabe zur Unterstützung der "Exact-Once"-Übermittlung mit Azure Stream Analytics
Azure Cosmos DB
Mithilfe von Azure Cosmos DB garantiert Azure Stream Analytics eine "Exactly-Once"-Übermittlung. Da Azure Stream Analytics upsert verwendet, ist keine Aktion für den Benutzer erforderlich. Weitere Informationen finden Sie unter Azure Stream Analytics-Ausgabe in Azure Cosmos DB.
SQL
Bei Verwendung der SQL-Ausgabe können Benutzer eine "Exactly-Once"-Übermittlung erreichen, wenn die folgenden Anforderungen erfüllt sind:
- Alle Ausgabestreamingereignisse verfügen über einen natürlichen Schlüssel, d. h. sie sind entweder durch ein Feld oder eine Kombination von Feldern eindeutig identifizierbar.
- Die SQL-Ausgabetabelle verfügt über eine eindeutige Einschränkung (oder einen Primärschlüssel), die mithilfe des natürlichen Schlüssels der Ausgabeereignisse erstellt wurde.
Dies ist ausreichend, um Duplikate zu vermeiden, da die SQL-Ausgabe alle Einschränkungen berücksichtigt, die für die Tabelle gesetzt werden, indem ereignisse übersprungen werden, die einen Verstoß gegen eine eindeutige Einschränkung verursachen.
Azure Table
Alle Entitäten in einer Azure Storage-Tabelle werden durch die Verkettung der RowKey
Felder und PartitionKey
eindeutig identifiziert. Azure Stream Analytics führt Entitäten hoch, sodass der Wert einer Tabellenentität das neueste Ausgabeereignis mit der entsprechenden RowKey
/PartitionKey
Kombination ist. Stellen Sie daher sicher, dass jedes Ausgabeereignis über eine eindeutige RowKey
/PartitionKey
Kombination verfügt, um eine genau einmalige Übermittlung zu erreichen. In diesem Fall werden frühere Versionen durch doppelte Ereignisse überschrieben. (Das systemdefinierte Timestamp
Feld, bei dem es sich um den Zeitpunkt der letzten Änderung für die Entität handelt, ändert sich in diesem Fall weiterhin.)