Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Azure Cosmos DB-Ausgabe in Azure Stream Analytics schreibt Ergebnisse der Datenstromverarbeitung als JSON-Dokumente in einen Azure Cosmos DB-Container. Es unterstützt Datenarchivierung und latenzarme Abfragen auf unstrukturierten JSON-Daten. Zu verstehen, wie sich diese Ausgabe verhält, hilft dir, sie für den Durchsatz, die Konsistenz und die Partitionierung zu konfigurieren, die dein Szenario erfordert.
Grundlagen von Azure Cosmos DB als Ausgabeziel
Die Azure Cosmos DB-Ausgabe in Stream Analytics schreibt deine Stream-Verarbeitungsergebnisse als JSON-Ausgabe in deine Azure Cosmos DB-Container. Wenn Sie mit Azure Cosmos DB nicht vertraut sind, lesen Sie zum Einstieg die Azure Cosmos DB-Dokumentation.
Stream Analytics verbindet sich ausschließlich über die SQL-API mit Azure Cosmos DB. Andere Azure Cosmos DB-APIs werden noch nicht unterstützt. Wenn Sie Stream Analytics auf mit anderen APIs erstellte Azure Cosmos DB-Konten verweisen, werden die Daten unter Umständen nicht richtig gespeichert. Wenn du Azure Cosmos DB als Ausgabe verwendest, setze deinen Job auf Kompatibilitätsstufe 1.2.
Stream Analytics erstellt keine Container in Ihrer Datenbank. Stattdessen müssen Sie sie vorher erstellen. Auf diese Weise können Sie die Abrechnungskosten für Azure Cosmos DB Container steuern. Ferner können Sie die Leistung, Konsistenz und Kapazität ihrer Container auch direkt mithilfe der Azure Cosmos DB-APIs optimieren. In den folgenden Abschnitten werden einige der Containeroptionen für Azure Cosmos DB ausführlich erläutert.
Optimieren von Konsistenz, Verfügbarkeit und Latenz
Um die Anforderungen Ihrer Anwendung zu erfüllen, optimieren Sie die Datenbank und Container in Azure Cosmos DB gezielt und wägen zwischen Konsistenz, Verfügbarkeit, Latenz und Durchsatz ab.
Je nachdem, welche Lesekonsistenz dein Szenario gegen Lese- und Schreiblatenz benötigt, wähle ein Konsistenzniveau für dein Datenbankkonto. Um den Durchsatz zu verbessern, erhöhen Sie die Request Units (RUs) für den Container. Standardmäßig aktiviert Azure Cosmos DB für jeden CRUD-Vorgang in Ihrem Container die synchrone Indizierung. Diese Option ist eine weitere nützliche Möglichkeit, die Lese- und Schreibleistung in Azure Cosmos DB zu steuern. Weitere Informationen finden Sie im Artikel Ändern der Datenbank- und Abfragekonsistenzebenen.
Einfügen/Aktualisieren über Stream Analytics
Durch die Integration von Stream Analytics mit der Azure Cosmos DB können Sie Datensätze basierend auf einer bestimmten Dokument-ID-Spalte in Ihren Container einfügen oder aktualisieren. Dieser Vorgang wird auch als Upsert bezeichnet. Stream Analytics verwendet einen optimistischen Upsert-Ansatz. Updates werden nur durchgeführt, wenn bei einem Einfügen ein Fehler aufgrund eines Dokument-ID-Konflikts auftritt.
Durch die Verwendung von Kompatibilitätsstufe 1.0 führt Stream Analytics dieses Update als PATCH-Operation durch, sodass es teilweise Updates des Dokuments unterstützt. Stream Analytics fügt neue Eigenschaften hinzu oder ersetzt eine vorhandene Eigenschaft inkrementell. Änderungen der Werte von Arrayeigenschaften in Ihrem JSON-Dokument führen jedoch zu einem Überschreiben des gesamten Arrays. Das heißt, das Array wird nicht zusammengeführt.
Durch die Verwendung von Kompatibilitätsstufe 1.2 ändert sich das Upsert-Verhalten, um das Dokument einzufügen oder zu ersetzen. Im Abschnitt zum Kompatibilitätsgrad 1.2 weiter unten wird dieses Verhalten beschrieben.
Wenn das eingehende JSON-Dokument ein bestehendes ID-Feld enthält, verwendet Azure Cosmos DB dieses Feld automatisch als Spalte Dokument-ID. Stream Analytics behandelt alle folgenden Schreibvorgänge entsprechend, was zu einer der folgenden Situationen führt:
- Eindeutige IDs führen zum Einfügen.
- Doppelte IDs und die Angabe ID für Dokument-ID lösen einen Upsertvorgang aus
- Doppelte IDs und eine nicht angegebene Dokument-ID lösen nach dem ersten Dokument einen Fehler aus.
Wenn Sie alle Dokumente speichern möchten, einschließlich derjenigen mit einer doppelten ID, benennen Sie das ID-Feld in der Abfrage um (mit dem Schlüsselwort AS). Lassen Sie Azure Cosmos DB das ID-Feld erstellen, oder ersetzen Sie die ID durch den Wert einer anderen Spalte (mithilfe des Schlüsselworts AS oder der Einstellung Dokument-ID).
Partitionierung von Daten in Azure Cosmos DB
Azure Cosmos DB skaliert Partitionen automatisch auf der Grundlage Ihrer Workload. Nutze unbegrenzte Container, um deine Daten zu partitionieren. Beim Schreiben in unbegrenzte Container verwendet Stream Analytics so viele parallele Writer wie im vorherigen Abfrageschritt oder im eingegebenen Partitionierungsschema.
Hinweis
Azure Stream Analytics unterstützt nur unbegrenzte Container mit Partitionsschlüsseln auf der obersten Ebene. Beispielsweise wird /region unterstützt. Verschachtelte Partitionsschlüssel (zum Beispiel ) /region/namewerden nicht unterstützt.
Abhängig von Ihrer Partitionsschlüsselauswahl wird möglicherweise diese Warnung angezeigt:
CosmosDB Output contains multiple rows and just one row per partition key. If the output latency is higher than expected, consider choosing a partition key that contains at least several hundred records per partition key.
Wählen Sie eine Partitions-Schlüssel-Eigenschaft mit vielen unterschiedlichen Werten und verteilt Ihre Arbeitslast gleichmäßig auf diese Werte. Als natürliches Artefakt der Partitionierung begrenzt der maximale Durchsatz einer einzelnen Partition Anfragen, die denselben Partitionsschlüssel betreffen.
Die Speichergröße für Dokumente mit dem gleichen Partitionsschlüsselwert ist auf 20 GB beschränkt. (Die Größenbeschränkung für die physische Partition beträgt 50 GB.) Ein idealer Partitionsschlüssel ist einer, der häufig als Filter in Ihren Abfragen erscheint und genügend Kardinalität besitzt, um sicherzustellen, dass Ihre Lösung skalierbar ist.
Partitionsschlüssel, die für Stream Analytics-Abfragen und Azure Cosmos DB verwendet werden, müssen nicht identisch sein. Für vollständig parallele Topologien verwenden Sie den Input Partition-Schlüssel, PartitionId, als Partitionsschlüssel für die Stream Analytics Abfrage, aber diese Option ist möglicherweise nicht die empfohlene Wahl für den Partitionsschlüssel eines Azure Cosmos DB-Containers.
Ein Partitionsschlüssel ist auch die Grenze für Transaktionen in gespeicherten Prozeduren und Triggern für Azure Cosmos DB. Wählen Sie den Partitionsschlüssel so, dass Dokumente, die gemeinsam in Transaktionen vorkommen, denselben Partitionsschlüsselwert teilen. Der Artikel Partitionierung in Azure Cosmos DB bietet ausführlichere Informationen zur Auswahl eines Partitionsschlüssels.
Für Azure Cosmos DB-Container mit fester Größe bietet Stream Analytics keine Möglichkeit, sie zu skalieren – weder vertikal noch horizontal –, sobald sie voll sind. Sie haben eine Obergrenze von 10 GB und einen Durchsatz von 10.000 RU/s. Zum Migrieren der Daten aus einem festen Container zu einem unbegrenzten Container (beispielsweise mit mindestens 1.000 RU/s und einem Partitionsschlüssel) verwenden Sie das Datenmigrationstool oder die Änderungsfeedbibliothek.
Die Möglichkeit, in mehrere feststehende Container zu schreiben, wird eingestellt. Nutze es nicht, um deinen Stream Analytics-Job zu skalieren.
Verbesserter Durchsatz mit Kompatibilitätsgrad 1.2
Durch die Verwendung von Kompatibilitätsstufe 1.2 unterstützt Stream Analytics die native Integration zum Massenschreiben in Azure Cosmos DB. Durch diese Integration schreibt Stream Analytics effektiv in Azure Cosmos DB, maximiert den Durchsatz und verarbeitet Drosselungsanfragen effizient.
Der verbesserte Schreibmechanismus ist aufgrund eines Unterschieds im Upsertverhalten unter einem neuen Kompatibilitätsgrad verfügbar. Durch die Verwendung von Levels vor 1.2 besteht das Upsert-Verhalten darin, das Dokument einzufügen oder zusammenzuführen. Durch die Verwendung von 1.2 ändert sich das Upsert-Verhalten, um das Dokument einzufügen oder zu ersetzen.
Durch die Verwendung von Levels vor Version 1.2 verwendet Stream Analytics ein benutzerdefiniertes gespeichertes Verfahren, um Dokumente pro Partitionsschlüssel in Azure Cosmos DB zu überladen. Dort schreibt Stream Analytics einen Batch als Transaktion. Selbst wenn ein einzelner Datensatz einen vorübergehenden Fehler (Drosselung) zeigt, muss Stream Analytics den gesamten Batch erneut versuchen. Dieses Verhalten verlangsamt Szenarien selbst bei vernünftiger Drosselung.
Das folgende Beispiel zeigt zwei identische Stream Analytics-Aufträge, die aus der gleichen Azure Event Hubs-Eingabe lesen. Beide Stream Analytics-Aufträge sind vollständig partitioniert, weisen eine Passthrough-Abfrage auf und schreiben in identische Azure Cosmos DB-Container. Die auf der linken Seite angezeigten Metriken stammen aus dem Auftrag, der mit Kompatibilitätsstufe 1.0 konfiguriert ist. Die Metriken rechts stammen aus dem Job, der mit 1.2 konfiguriert war. Der Partitionsschlüssel von Azure Cosmos DB-Containern ist eine eindeutige GUID, die aus dem Eingabeereignis stammt.
Die eingehende Ereignisrate in Event Hubs ist zweimal höher als die von Azure Cosmos DB-Container (20.000 RUs) konfiguriert sind, sodass Sie in Azure Cosmos DB mit einer Drosselung rechnen können. Der Auftrag mit Kompatibilitätsgrad 1.2 schreibt jedoch konsistent mit einem höheren Durchsatz (Ausgabeereignisse pro Minute) und mit einer niedrigeren durchschnittlichen Auslastung von Speichereinheiten (SUs in %). In deiner Umgebung hängt dieser Unterschied von einigen weiteren Faktoren ab. Zu diesen Faktoren zählen das gewählte Ereignisformat, die Größe von Eingabeereignissen/Nachrichten, die Partitionsschlüssel und die Abfrage.
Durch die Verwendung von 1.2 nutzt Stream Analytics intelligenter 100 Prozent des verfügbaren Durchsatzvolumens in Azure Cosmos DB, mit nur wenigen erneuten Einsendungen durch Drosselung oder Rate-Limiting. Dieses Verhalten ermöglicht eine bessere Erfahrung für andere Workloads, z. B. Abfragen, die gleichzeitig für den Container ausgeführt werden. Wenn Sie sehen möchten, wie Stream Analytics mit Azure Cosmos DB als Senke für 1.000 bis 10.000 Nachrichten pro Sekunde skaliert, probieren Sie dieses Azure-Beispielprojekt aus.
Der Durchsatz der Azure Cosmos DB-Ausgabe ist identisch, wenn man 1.0 und 1.1 verwendet. Es wird dringend empfohlen, in Stream Analytics Azure Cosmos DB Kompatibilitätsgrad 1.2 zu verwenden.
Azure Cosmos DB-Einstellungen für die JSON-Ausgabe
Wenn Sie Azure Cosmos DB als Ausgabe in Stream Analytics konfigurieren, definieren die folgenden Eigenschaften die Ausgabe.
| Feld | BESCHREIBUNG |
|---|---|
| Ausgabealias | Ein Alias zum Verweisen auf diese Ausgabe in Ihrer Stream Analytics-Abfrage. |
| Abonnement | Das Azure-Abonnement. |
| Konto-ID | Der Name oder Endpunkt-URI des Azure Cosmos DB-Kontos. |
| Kontoschlüssel | Der Schlüssel für den gemeinsamen Zugriff für das Azure Cosmos DB-Konto. |
| Datenbank | Der Name der Azure Cosmos DB-Datenbank. |
| Containername | Der Name des Containers, wie etwa MyContainer. Ein Container mit dem Namen MyContainer muss vorhanden sein. |
| Dokument-ID | Optional. Der Spaltenname in Ausgabeereignissen, der als eindeutiger Schlüssel für Einfügungs- oder Aktualisierungsoperationen dient. Wenn du es leer lässt, fügt Stream Analytics alle Ereignisse ohne Update-Option ein. |
Nach dem Konfigurieren der Azure Cosmos DB-Ausgabe können Sie sie in der Abfrage als Ziel einer INTO-Anweisung verwenden. Wenn du eine Azure Cosmos DB-Ausgabe auf diese Weise verwendest, musst du explizit einen Partitionsschlüssel festlegen.
Der Ausgabedatensatz muss eine Spalte mit Berücksichtigung der Groß-/Kleinschreibung enthalten, die nach dem Partitionsschlüssel in Azure Cosmos DB benannt ist. Für eine bessere Parallelisierung erfordert die Anweisung möglicherweise eine PARTITION BY-Klausel, die die gleiche Spalte verwendet.
Dies ist eine Beispielabfrage:
SELECT TollBoothId, PartitionId
INTO CosmosDBOutput
FROM Input1 PARTITION BY PartitionId
Fehlerbehandlung und Wiederholungsversuche
Falls ein vorübergehender Fehler, eine Nichtverfügbarkeit oder eine Drosselung des Diensts auftritt, während Stream Analytics Ereignisse an Azure Cosmos DB sendet, unternimmt Stream Analytics unbegrenzt viele Wiederholungsversuche, um den Vorgang erfolgreich abzuschließen. Aber es unternimmt keine Wiederholungen bei Fehlern vom Typ „Nicht autorisiert“ (HTTP-Fehlercode 401), „Nicht gefunden“ (HTTP-Fehlercode 404), „Verboten“ (HTTP-Fehlercode 403) oder „Ungültige Anforderung“ (HTTP-Fehlercode 400).
Häufige Probleme, die dazu führen, dass die Ausgabe von Azure Cosmos DB fehlschlägt
Mehrere Bedingungen können dazu führen, dass die Ausgabe der Azure Cosmos DB fehlschlägt. Die Ausgabedaten von Stream Analytics könnten gegen eine eindeutige Index-Einschränkung im Container verstoßen, die Spalte PartitionKey existiert möglicherweise nicht oder die Spalte Id existiert nicht. Weitere Informationen zu eindeutigen Index-Constraints finden Sie unter Unique key constraints in Azure Cosmos DB.
Verwandte Inhalte
- Grundlegendes zu den Ausgaben von Azure Stream Analytics
- Azure Stream Analytics-Ausgabe in die Azure SQL-Datenbank
- Benutzerdefinierte Blobausgabepartitionierung in Azure Stream Analytics