Verfügbarkeit und Konsistenz in Event Hubs

Dieser Artikel enthält Informationen zur Unterstützung der Verfügbarkeit und Konsistenz für Azure Event Hubs.

Verfügbarkeit

Mit Azure Event Hubs wird das Risiko von katastrophalen Ausfällen einzelner Computer oder sogar ganzer Racks auf Cluster verteilt, die sich über mehrere Fehlerdomänen in einem Rechenzentrum erstrecken. Außerdem werden vom Dienst transparente Fehlererkennungs- und Failovermechanismen implementiert. Daher kann er auch bei den oben erwähnten Ausfällen weiterhin innerhalb der garantierten Servicelevel und in der Regel ohne spürbare Unterbrechungen ausgeführt werden.

Wenn ein Event Hubs-Namespace in einer Region mit Verfügbarkeitszonen erstellt wird, ist das Ausfallrisiko noch weiter auf drei physisch getrennte Einrichtungen verteilt. Der Dienst verfügt dann über genügend Kapazitätsreserven, um den vollständigen, katastrophalen Ausfall einer gesamten Einrichtung sofort bewältigen zu können. Weitere Informationen finden Sie unter Azure Event Hubs: Georedundante Notfallwiederherstellung.

Wenn eine Clientanwendung Ereignisse an einen Event Hub sendet, ohne eine Partition anzugeben, werden diese automatisch auf die Partitionen Ihres Event Hubs verteilt. Falls eine Partition nicht verfügbar sein sollte, werden die Ereignisse auf die restlichen Partitionen verteilt. Dieses Verhalten ermöglicht das größte Maß an Betriebszeit. Für Anwendungsfälle, für die eine maximale Betriebszeit Voraussetzung ist, wird dieses Modell bevorzugt, anstatt Ereignisse an eine bestimmte Partition zu senden.

Konsistenz

In manchen Szenarios kann die Reihenfolge der Ereignisse wichtig sein. Nehmen Sie beispielsweise an, dass Ihr Back-End-System einen Updatebefehl vor einem Löschbefehl ausführen soll. Bei diesem Szenario sendet eine Clientanwendung Ereignisse an eine bestimmte Partition, damit die Reihenfolge beibehalten wird. Wenn eine Consumeranwendung diese auf der Partition vorhandenen Ereignisse nutzt, werden sie in der richtigen Reihenfolge gelesen.

Bedenken Sie bei dieser Konfiguration, dass Sie eine Fehlerantwort erhalten, wenn die Partition, an die Sie senden, nicht verfügbar ist. Zum Vergleich: Wenn Sie keine bestimmte Partition bevorzugen, sendet der Event Hubs-Dienst das Ereignis an die nächste verfügbare Partition.

Wenn Hochverfügbarkeit besonders wichtig ist, sollten Sie daher keine bestimmte Partition (mit Partitions-ID/Schlüssel) als Ziel verwenden. Durch die Verwendung von Partitions-ID bzw. -schlüssel wird die Verfügbarkeit eines Event Hub auf Partitionsebene herabgestuft. In diesem Szenario treffen Sie explizit die Wahl zwischen Verfügbarkeit (keine Partitions-ID/kein -schlüssel) und Konsistenz (Anheften von Ereignissen an eine bestimmte Partition). Ausführliche Informationen zu Partitionen in Event Hubs finden Sie unter Partitionen.

Anhang

Senden von Ereignissen ohne Angabe einer Partition

Es wird empfohlen, Ereignisse an einen Event Hub zu senden, ohne Partitionsinformationen festzulegen, damit der Event Hubs-Dienst die Last über partitionsübergreifend ausgleichen kann. Lesen Sie die folgenden Schnellstarts, um zu erfahren, wie Sie diesen Schritt in unterschiedlichen Programmiersprachen ausführen.

Senden von Ereignissen an eine bestimmte Partition

In diesem Abschnitt erfahren Sie, wie Sie mithilfe verschiedener Programmiersprachen Ereignisse an eine bestimmte Partition senden.

Um Ereignisse an eine bestimmte Partition zu senden, erstellen Sie den Batch mithilfe der EventHubProducerClient.CreateBatchAsync-Methode, indem Sie entweder PartitionId oder PartitionKey in CreateBatchOptions angeben. Der folgende Code sendet einen Batch von Ereignissen an eine bestimmte Partition, indem ein Partitionsschlüssel angegeben wird. Event Hubs stellt sicher, dass alle Ereignisse mit dem gleichen Partitionsschlüsselwert zusammen gespeichert und in der Empfangsreihenfolge übermittelt werden.

var batchOptions = new CreateBatchOptions { PartitionKey = "cities" };
using var eventBatch = await producer.CreateBatchAsync(batchOptions);

Sie können auch die EventHubProducerClient.SendAsync-Methode verwenden, indem Sie PartitionId oder PartitionKey in SendEventOptions angeben.

var sendEventOptions  = new SendEventOptions { PartitionKey = "cities" };
// create the events array
producer.SendAsync(events, sendOptions)

Nächste Schritte

Weitere Informationen zu Event Hubs finden Sie unter den folgenden Links: