Stream partitionieren
Um den skalierbaren Betrieb des Streaming-Service in vollem Umfang nutzen zu können, konfigurieren Sie die Anzahl der Partitionen im Stream.
Bevor Sie einen Stream erstellen, berücksichtigen Sie den erwarteten Streamdurchsatz, die Partitionsschlüsselstrategie und den Konsum des Streams. Die meisten Konfigurationswerte können nicht geändert werden, nachdem der Stream erstellt wurde. Beispiel: Nach der Erstellung eines Streams können Sie die Aufbewahrungszeit von Nachrichten oder die Anzahl der Partitionen nicht mehr ändern.
Partitionen und Durchsatz
Beim Erstellen eines Streams müssen Sie angeben, wie viele Partitionen der Stream hat. Sie können die Anzahl der Partitionen für den Stream anhand des erwarteten Durchsatzes Ihrer Anwendung bestimmen.
Multiplizieren Sie die durchschnittliche Nachrichtengröße mit der maximalen Anzahl von pro Sekunde geschriebenen Nachrichten, um den erwarteten Durchsatz zu schätzen. Da eine einzelne Partition auf eine Schreibrate von 1 MB pro Sekunde und 5 GET-Anforderungen pro Sekunde pro Consumer-Gruppe begrenzt ist, erfordert ein höherer Durchsatz mehr Partitionen, um Throttling zu vermeiden. Berücksichtigen Sie bei Designentscheidungen auch weitere Streaming-Begrenzungen.
Um Anwendungsspitzen besser zu bewältigen, empfehlen wir die Zuweisung von Partitionen, die etwas höher sind als der maximale Durchsatz.
In Partitionen veröffentlichen
Sie können auch anhand des Inhalts der Nachrichten, die Sie in einem Stream veröffentlichen möchten, bestimmen, wie viele Partitionen der Stream haben soll.
Eine Nachricht wird in einer Partition des Streams veröffentlicht. Bei mehreren Partitionen wird die Partition, in der die Nachricht veröffentlicht wird, anhand des Nachrichtenschlüssels berechnet.
Weitere Informationen finden Sie unter Nachrichten veröffentlichen.
Zuordnung von Schlüsseln zu Partitionen
Nachrichten mit demselben Schlüssel werden an dieselbe Partition gesendet. Nachrichten mit unterschiedlichen Schlüsseln können an unterschiedliche Partitionen oder an dieselbe Partition gesendet werden. Wenn Sie keinen Schlüssel angeben, erkennt Streaming den Nullschlüssel und generiert einen Zufallsschlüssel im Namen des Benutzers. Wenn ein Benutzer dieselbe Nachricht zweimal veröffentlicht, kann diese an verschiedene Partitionen geleitet werden, weil ein völlig neuer Schlüssel generiert wird. Es wird nicht erwartet, dass alle Nachrichten mit einem Nullschlüssel an dieselbe Partition gesendet werden.
Standardmäßig stellt Streaming eine einheitliche und vorhersehbare Verteilung von Nachrichten an die Partitionen eines Streams bereit. Mit Streaming-APIs können Sie nicht genau angeben, in welcher Partition Daten veröffentlicht werden, da dadurch das Risiko eines Hotspottings einer einzelnen Partition entstehen kann, wenn ein Benutzer die Nuancen von Streaming nicht kennt. Wenn Sie jedoch Kafka-APIs zur Interaktion mit Streaming verwenden, können Sie eine benutzerdefinierte Partitionierung ausführen und Nachrichten explizit Partitionen zuordnen. Das wird jedoch nicht empfohlen.
Effektive Partitionierungsschlüssel
Um eine gleichmäßige Verteilung der Nachrichten sicherzustellen, benötigen Sie effektive Werte für Ihre Nachrichtenschlüssel. Um einen gültigen Wert zu erstellen, berücksichtigen Sie die Selektivität und Kardinalität Ihrer Streaming-Daten.
Kardinalität: Bedenken Sie die Gesamtanzahl eindeutiger Schlüssel, die je nach dem jeweiligen Anwendungsfall möglicherweise generiert werden können. Höhere Kardinalität bedeutet im Allgemeinen eine bessere Verteilung.
Selektivität: Berücksichtigen Sie die Anzahl der Nachrichten mit jedem Schlüssel. Eine höhere Selektivität bedeutet mehr Nachrichten pro Schlüssel, was zu Hotspots führen kann.
Sorgen Sie nach Möglichkeit für hohe Kardinalität und niedrige Selektivität.
Anordnen
Nachrichten mit demselben Schlüssel werden garantiert in der Reihenfolge gespeichert, in der sie veröffentlicht werden, und an die Consumer in derselben Reihenfolge übermittelt, in der sie erzeugt wurden. Da Nachrichten mit demselben Schlüssel an dieselbe Partition gesendet werden, gilt diese Garantie nur auf Partitionsebene.
Partitionen und Consumer-Gruppen
Wenn Ihr Stream von einer oder mehreren Nutzungsgruppen konsumiert wird, berücksichtigen Sie dies in Ihrer Entscheidung über die Anzahl der Partitionen. Partitionslesevorgänge werden auf die Instanzen in einer Consumer-Gruppe verteilt.
Consumer-Gruppen können jeweils immer nur eine einzelne Instanz verwenden, wenn der Stream nur eine Partition aufweist. Wenn der Stream mehrere Partitionen enthält, können Sie die Anzahl der Instanzen auf die Anzahl der Partitionen skalieren und eine Instanz in der Gruppe festlegen, die Daten von einer Partition im Stream liest.
Weitere Informationen finden Sie unter Consumer-Gruppen verwenden.