Skalierung mit Event Hubs

Es gibt zwei Faktoren, die die Skalierung mit Event Hubs beeinflussen.

  • Durchsatzeinheiten (Standard-Tarif) oder Verarbeitungseinheiten (Premium-Tarif)
  • Partitionen

Durchsatzeinheiten

Die Durchsatzkapazität von Event Hubs wird durch Durchsatzeinheiten gesteuert. Durchsatzeinheiten werden vorab als Kapazitätseinheiten erworben. Eine einzelne Durchsatzeinheit ermöglicht Folgendes:

  • Eingehende Daten: bis zu 1 MB pro Sekunde oder 1.000 Ereignisse pro Sekunde, je nachdem, was zuerst eintritt
  • Ausgehende Daten: bis zu 2 MB pro Sekunde oder 4.096 Ereignisse pro Sekunde

Bei Überschreitung der Kapazität der erworbenen Durchsatzeinheiten wird der Eingang eingeschränkt und Event Hubs löst eine ServerBusyException aus. Der Ausgang erstellt zwar keine Drosselungsausnahmen, die Kapazität der erworbenen Durchsatzeinheiten ist allerdings dennoch beschränkt. Wenn Sie Ausnahmen für die Veröffentlichungsrate erhalten oder einen größeren Ausgang erwarten, überprüfen Sie, wie viele Durchsatzeinheiten Sie für den Namespace erworben haben. Sie können Durchsatzeinheiten auf der Seite Skalierung der Namespaces im Azure-Portal verwalten. Mithilfe der Event Hubs-APIs können Durchsatzeinheiten auch programmgesteuert verwaltet werden.

Durchsatzeinheiten werden im Voraus erworben und auf Stundenbasis abgerechnet. Nach dem Erwerb werden Durchsatzeinheiten für mit einem Minimum von einer Stunde in Rechnung gestellt. Bis zu 40 Durchsatzeinheiten können für einen Event Hubs-Namespace erworben und in allen Event Hubs dieses Namespace gemeinsam verwendet werden.

Das Feature Automatische Vergrößerung von Event Hubs wird automatisch durch Erhöhung der Anzahl von Durchsatzeinheiten zentral hochskaliert, um den Nutzungsanforderungen gerecht zu werden. Zusätzliche Durchsatzeinheiten verhindern Drosselungsszenarien, bei denen Folgendes vorliegt:

  • Die Datenerfassungsrate überschreitet die festgelegten Durchsatzeinheiten.
  • Die Raten für ausgehende Datenanforderungen überschreiten die festgelegten Durchsatzeinheiten.

Der Event Hubs-Dienst erhöht den Durchsatz, wenn die Last den minimalen Schwellenwert überschreitet, ohne dass Anforderungen mit ServerBusy-Fehlern auftreten.

Weitere Informationen zum Feature für die automatische Vergrößerung finden Sie unter Automatisches Skalieren von Durchsatzeinheiten.

Verarbeitungseinheiten

Event Hubs Premium bietet überlegene Leistung und bessere Isolation in einer verwalteten mehrinstanzenfähigen PaaS-Umgebung. Die Ressourcen in einem Premium-Tarif werden auf CPU- und Arbeitsspeicherebene isoliert, sodass jede Mandantenworkload isoliert ausgeführt wird. Dieser Ressourcencontainer wird als Verarbeitungseinheit (Processing Unit, PU) bezeichnet. Sie können für jeden Event Hubs Premium-Namespace 1, 2, 4, 6, 8, 10, 12 oder 16 Verarbeitungseinheiten erwerben.

Welche Datenmengen Sie mit einer Verarbeitungseinheit erfassen und streamen können, hängt von verschiedenen Faktoren ab, z. B. von den Producern, den Consumern oder der Rate für die Erfassung und Verarbeitung.

Beispielsweise kann der Event Hubs Premium-Namespace mit einer PU und einem Event Hub (100 Partitionen) eine Kernkapazität von ungefähr 5 bis 10 MB/s ein- und 10 bis 20 MB/s ausgehende Daten für AMQP- oder Kafka-Workloads bieten.

Informationen zum Konfigurieren von Verarbeitungseinheiten (PUs) für einen Namespace im Premium-Tarif finden Sie unter Konfigurieren von Verarbeitungseinheiten.

Hinweis

Weitere Informationen zu Kontingenten und Grenzwerten finden Sie unter Azure Event Hubs – Kontingente und Grenzwerte.

Partitionen

In Event Hubs werden Sequenzen von an einen Event Hub gesendeten Ereignissen in einer oder mehreren Partitionen organisiert. Neu eingehende Ereignisse werden am Ende dieser Sequenz hinzugefügt.

Abbildung eines Event Hub mit wenigen Partitionen

Eine Partition kann als „Commitprotokoll“ betrachtet werden. Partitionen speichern Ereignisdaten, die folgende Informationen enthalten:

  • Text des Ereignisses
  • Benutzerdefinierte Eigenschaftensammlung zur Beschreibung des Ereignisses
  • Metadaten wie den Offset in der Partition und die Nummer in der Datenstromsequenz
  • Dienstseitiger Zeitstempel des Akzeptierungsvorgangs

Diagramm: Sequenz der Ereignisse (von alt bis neu)

Vorteile der Verwendung von Partitionen

Event Hubs wurde zur Unterstützung der Verarbeitung von großen Ereignismengen konzipiert, und die Partitionierung ist hierbei aus zwei Gründen hilfreich:

  • Bei Event Hubs handelt es sich zwar um einen PaaS-Dienst, aber es gibt auch eine physische Komponente. Zum Führen eines Protokolls, in dem die Reihenfolge der Ereignisse festgehalten wird, müssen diese Ereignisse zusammen im zugrunde liegenden Speicher und in den zugehörigen Replikaten gespeichert werden. Dies führt dazu, dass für ein Protokoll dieser Art ein Grenzwert für den Durchsatz gilt. Die Partitionierung ermöglicht die Verwendung mehrerer paralleler Protokolle für den gleichen Event Hub, wodurch sich die verfügbare Rohkapazität für den E/A-Durchsatz (Eingabe/Ausgabe) multipliziert.
  • Ihre eigenen Anwendungen müssen die Verarbeitung der Ereignismenge, die an einen Event Hub gesendet wird, bewältigen können. Dies kann ziemlich komplex sein und erfordert eine hohe Kapazität für die Parallelverarbeitung mit Skalierungsoptionen. Die Kapazität eines einzelnen Prozesses zum Verarbeiten von Ereignissen ist begrenzt, sodass Sie mehrere Prozesse benötigen. Partitionen werden von Ihrer Lösung verwendet, um diese Prozesse mit Daten zu versorgen, während gleichzeitig sichergestellt wird, dass jedes Ereignis über einen eindeutigen Verarbeitungsbesitzer verfügt.

Anzahl von Partitionen

Die Anzahl von Partitionen wird zum Zeitpunkt der Erstellung eines Event Hubs angegeben. Sie muss zwischen 1 und der maximal zulässigen Partitionsanzahl für jeden Tarif liegen. Informationen zum Grenzwert für die Partitionsanzahl für jeden Tarif finden Sie in diesem Artikel.

Wir empfehlen, mindestens so viele Partitionen auszuwählen, wie Sie voraussichtlich während der Spitzenauslastung Ihrer Anwendung für den entsprechenden Event Hub benötigen. Mit Ausnahme der Premium- und dedizierte Ebenen können Sie die Anzahl der Partitionen für einen Event-Hub nach dessen Erstellung nicht mehr ändern. Für einen Event-Hub auf einer Premium- oder dedizierten Ebene können Sie die Partitionsanzahl nach seiner Erstellung erhöhen, aber nicht verringern. Die Verteilung von Datenströmen auf die Partitionen, ändert die Zuordnung von Partitionsschlüsseln zu den Partitionen. Daher sollten Sie Änderungen dieser Art nach Möglichkeit unbedingt vermeiden, falls die relative Reihenfolge der Ereignisse in Ihrer Anwendung wichtig ist.

Es ist verlockend, die Anzahl von Partitionen auf den zulässigen Höchstwert festzulegen. Hierbei sollten Sie aber stets beachten, dass Ihre Ereignisdatenströme so strukturiert sein müssen, dass Sie wirklich mehrere Partitionen nutzen können. Falls bei Ihnen die Reihenfolge für alle Ereignisse oder auch nur eine Handvoll untergeordneter Datenströme unbedingt beibehalten werden muss, kommen Sie möglicherweise nicht in den Genuss der Vorteile, die sich aus der Verwendung von mehreren Partitionen ergeben. Wenn mehrere Partitionen genutzt werden, erhöht sich zudem die Komplexität der Verarbeitungsseite.

In Bezug auf die Abrechnung spielt es keine Rolle, wie viele Partitionen sich in einem Event Hub befinden. Die Kosten richten sich nach der Anzahl von Preiseinheiten (Durchsatzeinheiten (TUs) für den Standard-Tarif, Verarbeitungseinheiten (PUs) für den Premium-Tarif und Kapazitätseinheiten (CUs) für den dedizierten Tarif) für den Namespace oder den dedizierten Cluster. Für einen Event Hub im Standard-Tarif mit 32 Partitionen oder einen Event Hub mit nur einer Partition fallen z. B. die gleichen Kosten an, wenn der Namespace auf eine Kapazität von 1 TU festgelegt ist. Darüber hinaus können Sie die Durchsatzeinheiten oder Verarbeitungseinheiten für Ihren Namespace oder die Kapazitätseinheiten Ihres dedizierten Clusters unabhängig von der Partitionsanzahl skalieren.

Eine Partition ist ein Mechanismus für die Datenstrukturierung, mit dem Sie Daten parallel veröffentlichen und nutzen können. Daher empfiehlt es sich, ein ausgewogenes Verhältnis zwischen Skalierungseinheiten (Durchsatzeinheiten für die Standardebene, Verarbeitungseinheiten für die Premium-Ebene oder Kapazitätseinheiten für die dedizierte Ebene) und Partitionen anzustreben, um eine optimale Dimensionierung zu erzielen. Im Allgemeinen wird ein maximaler Durchsatz von 1 MB/s pro Partition empfohlen. Eine Faustregel für die Berechnung der Anzahl der Partitionen wäre daher, den maximal erwarteten Durchsatz durch 1 MB/s zu teilen. Wenn Ihr Anwendungsfall beispielsweise 20 MB/s erfordert, wird empfohlen, mindestens 20 Partitionen zu verwenden, um einen optimalen Durchsatz zu erreichen.

Wenn Sie jedoch über ein Modell verfügen, in dem die Anwendung eine bestimmte Partition bevorzugt, ist eine höhere Anzahl von Partitionen nicht von Vorteil. Weitere Informationen finden Sie unter Verfügbarkeit und Konsistenz.

Zuordnen der Ereignisse zu Partitionen

Sie können einen Partitionsschlüssel zum Zuordnen der in spezifischen Partitionen eingehenden Daten für die Datenorganisation verwenden. Der Partitionsschlüssel ist ein vom Absender bereitgestellter Wert, der an einen Event Hub übergeben wird. Er wird über eine statische Hashfunktion verarbeitet, welche die Partitionszuweisung erstellt. Wenn Sie beim Veröffentlichen eines Ereignisses keinen Partitionsschlüssel angeben, wird eine Roundrobinzuordnung verwendet.

Dem Ereignisherausgeber ist nur der Partitionsschlüssel bekannt, nicht die Partition, auf der die Ereignisse veröffentlicht werden. Dieses Entkoppeln von Schlüssel und Partition entbindet den Absender davon, zu viel über die Downstreamverarbeitung wissen zu müssen. Eine gerätebezogene oder für einen Benutzer eindeutige Identität stellt einen guten Partitionsschlüssel dar, es können aber auch andere Attribute wie z. B. Geografie zum Gruppieren von verwandten Ereignissen in einer einzelnen Partition verwendet werden.

Durch das Angeben eines Partitionsschlüssels können zusammengehörige Ereignisse gemeinsam auf derselben Partition und in der exakten Reihenfolge ihres Empfangs gespeichert werden. Der Partitionsschlüssel ist eine Zeichenfolge, die von Ihrem Anwendungskontext abgeleitet wird, und dient zum Identifizieren der Beziehung zwischen den Ereignissen. Eine von einem Partitionsschlüssel identifizierte Ereignissequenz ist ein Datenstrom. Eine Partition ist ein Multiplex-Protokollspeicher für viele Datenströme dieser Art.

Hinweis

Sie können Ereignisse zwar direkt an Partitionen senden, dies wird jedoch insbesondere dann nicht empfohlen, wenn Sie Wert auf Hochverfügbarkeit legen. Dadurch wird die Verfügbarkeit eines Event Hub auf Partitionsebene herabgestuft. Weitere Informationen finden Sie unter Verfügbarkeit und Konsistenz.

Nächste Schritte

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