Informationen zur reservierten Plattenbelegung

Hier erfahren Sie, wie der verwendbare Speicher einer Event Streams-Instanz von den erstellten Themen und Partitionen und den von Ihnen angewendeten Konfigurationseinstellungen verwendet wird.

Zunächst einmal ist zu beachten, dass der definierte Speicher einer Event Streams-Instanz verwendbar ist. Das bedeutet, dass Sie sich keine Gedanken über den von Replikaten verwendeten Speicher machen müssen (da der Replikationsfaktor für alle Themen auf 3 gesetzt ist), der nicht aus dem verwendbaren Speicher stammt. Dies hält die Dinge einfach und Sie können planen, wie die Aufbewahrung dieser Nachrichten der Speicherbelegung zugeordnet werden soll.

Informationen zur Speicherung von Daten bei Kafka

Kafka bietet Benutzern die Möglichkeit, Aufbewahrungsgrenzwerte für Topics zu konfigurieren.

Der Konfigurationsparameter 'retention.bytes' gibt die Gesamtzahl Byte an, die für Nachrichten für jede Partition des Topics zugeordnet wird. Wenn sie überschritten wird, löscht Kafka die ältesten Nachrichten. Wenn Sie beispielsweise im Allgemeinen Nachrichten mit einer Größe von 200 MB pro Tag an ein Thema mit einer einzelnen Partition senden und diese 5 Tage lang aufbewahren möchten, setzen Sie retention.bytes auf 1 GB (200 MB x 5 Tage).

Bei mehr als 10 Partitionen würden Sie retention.bytes = 100 MB (1 GB/10 Partitionen) festlegen.

Kafka spaltet jede Partition intern in Protokollsegmente auf. Dies ist wieder eine Eigenschaft, die Sie festlegen können, log.segment.size. Der Standardwert ist 512 MB. Als wir erwähnt haben, dass Kafka die ältesten Nachrichten löscht, wird das älteste Protokollsegment tatsächlich gelöscht. Aus diesem Grund muss Kafka zusätzlich zur Anzahl der Protokollsegmente, die erforderlich sind, um die retention.bytes-Konfiguration zu erfüllen, Speicherplatz für ein zusätzliches Protokollsegment aufbewahren.

Siehe die nachfolgenden Beispiele.

 retention.bytes = 1 GB
 log.segment.size = 512 MB
 Kafka needs approximately 1.5 GB per partition for the topic storage.

 retention.bytes = 100 MB
 log.segment.size = 512 MB
 Kafka needs approximately 1 GB per partition for the topic storage.

Für Indizes wird pro Partition mehr Speicher benötigt. Für jedes Protokollsegment speichert Kafka außerdem zwei Indizes. Ihre Größen werden durch segment.index.sizedefiniert, das ebenfalls konfigurierbar ist und einen Standardwert von 10 MB hat. Zu Referenzzwecken wird der von Indizes verwendete Speicher wie folgt berechnet:

 2 x number.of.log.segments x segment.index.size

Wo

 number.of.log.segments = floor(retention.bytes/log.segment.size) + 1

Speicher mit Event Streams verwalten

Wenn Sie Topic-Verwaltungsoperationen ausführen, wie z. B. Themen erstellen, Partitionen erstellen oder Themenkonfigurationen ändern, stellt Event Streams sicher, dass genügend Speicher verfügbar ist, um die Operation zu erfüllen. Dazu berechnet Event Streams für jedes Thema die "reservierte Größe" unter Verwendung der folgenden Methode.

Für Themen mit der Einstellung compact für cleanup.policy beträgt die reservierte Größe, die für jede Partition verbraucht wird, immer 1 GB. Wenn cleanup.policy für ein Thema auf compact gesetzt ist, werden alle Werte, die für die Topiceinstellungen retention.bytes oder retention.ms verwendet werden, ignoriert.

Für Themen mit der cleanup.policy-Einstellung delete oder compact, delete wird die reservierte Größe, die für jede Partition verbraucht wird, wie folgt berechnet:

 Reserved size = retention.bytes + log.segment.size + (2 x segment.index.size x number.of.log.segments)

Wo

 number.of.log.segments = floor(retention.bytes/log.segment.size) + 1

Der Prozentsatz des gesamten reservierten Speichers wird in IBM Cloud Monitoring auch durch die Metrik ibm_eventstreams_instance_reserved_disk_space_percent angezeigt.

Anforderungen zum Erstellen eines neuen Themas oder zum Hinzufügen von Partitionen zu einem vorhandenen Thema werden zurückgewiesen, wenn sie dazu führen würden, dass die Gesamtmenge des reservierten Speichers 90% [1] des für die Event Streams-Instanz konfigurierten Speichers überschreitet. Zurückgewiesene Anforderungen erhalten den Fehler PolicyViolation, der angibt, dass der Grenzwert des reservierten Speichers für die Instanz erreicht wurde. Wenn der Grenzwert für reservierten Speicher erreicht ist, müssen Sie Themen löschen oder den für die Instanz konfigurierten Speicherplatz erhöhen, bevor weitere Themen erstellt werden.

Die Berechnung der reservierten Größe kann sich künftig ändern, wenn der Speicherbedarf für Kafka aktualisiert wird.

Beispiele

Ein nicht offensichtlicher Effekt ist, dass Kafka abhängig von Ihren Topickonfigurationen mehr Speicher als erwartet reservieren kann. Siehe die nachfolgenden Beispiele.

  1. Ein Topic mit dem Wert 1 GB für die Aufbewahrungsgröße ('retention.bytes') und einer Protokollsegmentgröße ('log.segment.size') von 512 MB:

    Mit einer Partition würden für das Topic ungefähr 1,5 GB an Speicher reserviert.
    In diesem Fall ist die reservierte Größe erheblich größer als die Aufbewahrungsgröße.

  2. Ein Topic mit dem Wert 50 GB für die Aufbewahrungsgröße ('retention.bytes') und einer Protokollsegmentgröße ('log.segment.size') von 512 MB:

    Mit einer Partition würden für das Topic ungefähr 50,5 GB an Speicher reserviert.

    In diesem Fall liegt die reservierte Größe sehr nahe an der Aufbewahrungsgröße.

  3. Ein Topic mit dem Wert 1 GB für die Aufbewahrungsgröße ('retention.bytes') und einer Protokollsegmentgröße ('log.segment.size') von 128 MB:

    Mit einer Partition würden für das Topic ungefähr 1,1 GB an Speicher reserviert.

    In diesem Fall liegt die reservierte Größe sehr nahe an der Aufbewahrungsgröße.


  1. Event Streams verwendet einen Teil des Speichers, der einer Instanz zugeordnet ist, sowohl für interne Managementfunktionen als auch als operative Reserve für Protokollsegmente, die zum Löschen infrage kommen. ↩︎