Kafka Architecture: Log Compaction

Dieser Beitrag knüpft wirklich an unsere Serie über kafka architecture an, die kafka topics architecture , kafka producer architecture , kafka consumer architecture und kafka ecosystem architecture umfasst .

Dieser Artikel ist stark vom Kafka-Abschnitt zum Design rund um die Protokollverdichtung inspiriert . sie können es sich als die Cliff Notes zum Kafka-Design rund um die Protokollverdichtung vorstellen.

kafka kann ältere Datensätze basierend auf der Zeit oder Größe eines Protokolls löschen. kafka unterstützt auch die Protokollkomprimierung für die Datensatzschlüsselkomprimierung. Protokollkomprimierung bedeutet, dass kafka die neueste Version eines Datensatzes beibehält und die älteren Versionen während einer Protokollkomprimierung löscht.

jean-paul azar arbeitet bei cloudurable . cloudcloud bietet Kafka-Schulungen, Kafka-Beratung, Kafka-Support und hilft beim Einrichten von Kafka-Clustern in aws .

kafka-Protokollkomprimierung

Bei der Protokollkomprimierung wird mindestens der letzte bekannte Wert für jeden Datensatzschlüssel für eine einzelne Themenpartition beibehalten. komprimierte Protokolle sind nützlich, um den Status nach einem Absturz oder Systemfehler wiederherzustellen.

Sie sind nützlich für In-Memory-Dienste, persistente Datenspeicher, das Neuladen eines Caches usw. ein wichtiger Anwendungsfall von Datenströmen besteht darin, Änderungen an verschlüsselten, veränderlichen Datenänderungen an einer Datenbanktabelle oder Änderungen an Objekten im In-Memory-Microservice zu protokollieren.

Die Protokollkomprimierung ist ein granularer Aufbewahrungsmechanismus, der die letzte Aktualisierung für jeden Schlüssel beibehält. ein komprimiertes Themenprotokoll enthält eine vollständige Momentaufnahme der endgültigen Datensatzwerte für jeden Datensatzschlüssel, nicht nur für die kürzlich geänderten Schlüssel.

Mit der Kafka-Protokollkomprimierung können nachgelagerte Verbraucher ihren Status aus einem komprimierten Protokollthema wiederherstellen.

Kafka-Protokollverdichtungsstruktur

Bei einem komprimierten Protokoll hat das Protokoll Kopf und Schwanz. der Kopf des komprimierten Protokolls ist identisch mit einem herkömmlichen Kafka-Protokoll. neue Datensätze werden an das Ende des Kopfes angehängt.

Die gesamte Holzverdichtung erfolgt am Ende des Holzes. nur der Schwanz wird verdichtet. datensätze am Ende des Protokolls behalten ihren ursprünglichen Versatz beim Schreiben bei, nachdem sie mit compaction cleanup neu geschrieben wurden.

kafka-Protokollverdichtungsstruktur

Protokollverdichtungsstruktur

Grundlagen der Kafka-Protokollverdichtung

Alle komprimierten Protokollversätze bleiben gültig, auch wenn der Datensatz mit Offset komprimiert wurde, da ein Verbraucher den nächsthöheren Offset erhält.

Die Kafka-Protokollkomprimierung ermöglicht auch das Löschen. eine Nachricht mit einem Schlüssel und einer Null-Nutzlast verhält sich wie ein Grabstein, ein Löschmarker für diesen Schlüssel. grabsteine werden nach einer gewissen Zeit gelöscht. die Protokollkomprimierung wird regelmäßig im Hintergrund ausgeführt, indem Protokollsegmente erneut kopiert werden. die Komprimierung blockiert keine Lesevorgänge und kann gedrosselt werden, um Auswirkungen auf die E / A von Herstellern und Verbrauchern zu vermeiden.

kafka-Protokollverdichtungsprozess

 Kafka-Protokollverdichtungsprozess

kafka-Protokollverdichtungsreinigung

Wenn ein Kafka-Verbraucher bis zum Kopf des Protokolls gefangen bleibt, sieht er jeden Datensatz, der geschrieben wird.

topic config min.compaction.lag.ms wird verwendet, um einen Mindestzeitraum zu garantieren, der verstreichen muss, bevor eine Nachricht komprimiert werden kann. der Verbraucher sieht alle Grabsteine, solange der Verbraucher den Kopf eines Protokolls in einem Zeitraum erreicht, der kleiner als die Themenkonfiguration delete.retention.ms ist (der Standardwert ist 24 Stunden). durch die Protokollkomprimierung werden Nachrichten niemals neu angeordnet, sondern nur einige entfernt. der Partitions-Offset für eine Nachricht ändert sich nie.

Jeder Consumer, der vom Beginn des Protokolls an liest, sieht mindestens den Endzustand aller Datensätze in der Reihenfolge, in der sie geschrieben wurden.

kafka log Cleaner

Denken Sie daran, dass ein Kafka-Thema ein Protokoll hat. ein Protokoll wird in Partitionen unterteilt, und Partitionen werden in Segmente unterteilt, die Datensätze mit Schlüsseln und Werten enthalten.

Der kafka Log Cleaner führt eine Protokollkomprimierung durch. der Log Cleaner verfügt über einen Pool von Hintergrundverdichtungsthreads. diese Threads kopieren Protokollsegmentdateien neu und entfernen ältere Datensätze, deren Schlüssel kürzlich im Protokoll erneut angezeigt wird. jeder Verdichtungsthread wählt das Protokoll aus, das das höchste Verhältnis von Protokollkopf zu Protokollende aufweist. anschließend kopiert der Komprimierungsthread das Protokoll von Anfang bis Ende erneut und entfernt Datensätze, deren Schlüssel später im Protokoll vorkommen.

Wenn der Log Cleaner Logpartitionssegmente bereinigt, werden die Segmente sofort in die Logpartition getauscht und ersetzen die älteren Segmente. auf diese Weise erfordert die Komprimierung nicht den doppelten Speicherplatz der gesamten Partition, da zusätzlicher Speicherplatz nur ein zusätzliches Protokollpartitionssegment benötigt – Divide and Conquer.

topic config for log compaction

Um die Komprimierung für ein Thema zu aktivieren, verwenden Sie topic config log.cleanup.policy=compact .

Verwenden Sie topic config log.cleaner.min.compaction.lag.ms , um eine Verzögerung für den Start der Komprimierung von Datensätzen nach dem Schreiben festzulegen . datensätze werden erst nach diesem Zeitraum komprimiert. die Einstellung gibt den Verbrauchern Zeit, jeden Datensatz abzurufen.

Überprüfung der Protokollkomprimierung

Auf welche drei Arten kann kafka Datensätze löschen?

kafka kann ältere Datensätze basierend auf der Zeit oder Größe eines Protokolls löschen. kafka unterstützt auch die Protokollkomprimierung für die Datensatzschlüsselkomprimierung.

Wozu ist die Holzverdichtung gut?

Da die Protokollkomprimierung den letzten bekannten Wert beibehält, handelt es sich um eine vollständige Momentaufnahme der neuesten Datensätze. es ermöglicht nachgeschalteten Verbrauchern, ihren Zustand wiederherzustellen.

Wie ist die Struktur eines verdichteten Baumstamms? beschreiben Sie die Struktur.

Bei einem verdichteten Stamm hat der Stamm Kopf und Schwanz. der Kopf des komprimierten Protokolls ist identisch mit einem herkömmlichen Kafka-Protokoll. neue Datensätze werden an das Ende des Kopfes angehängt. die gesamte Holzverdichtung erfolgt am Ende des verdichteten Baumstamms.

Ändern sich die Protokolldatensatz-Offsets nach der Komprimierung? Nein.

Was ist ein Partitionssegment?

Erinnern Sie sich, dass ein Thema ein Protokoll hat. ein Themenprotokoll ist in Partitionen unterteilt, und Partitionen sind in Segmentdateien unterteilt, die Datensätze mit Schlüsseln und Werten enthalten. segmentdateien ermöglichen das Teilen und Erobern, wenn es um die Komprimierung von Protokollen geht. eine Segmentdatei ist Teil der Partition. wenn der Log Cleaner Logpartitionssegmente bereinigt, werden die Segmente sofort in die Logpartition getauscht und ersetzen die älteren Segmentdateien. auf diese Weise erfordert die Komprimierung nicht den doppelten Speicherplatz der gesamten Partition, da zusätzlicher Speicherplatz nur ein zusätzliches Protokollpartitionssegment benötigt.

jean-paul azar arbeitet bei cloudurable . cloudcloud bietet Kafka-Schulungen, Kafka-Beratung, Kafka-Support und hilft beim Einrichten von Kafka-Clustern in aws .

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.