Kafka Architecture: Log Compaction

questo post prende davvero fuori dalla nostra serie su kafka architecture che comprende argomenti kafka architecture , kafka producer architecture , kafka consumer architecture e kafka ecosystem architecture .

questo articolo è fortemente ispirato alla sezione kafka sul design intorno alla compattazione dei tronchi . puoi pensarlo come le note della scogliera sul design di kafka intorno alla compattazione dei log .

kafka può eliminare i record precedenti in base al tempo o alle dimensioni di un registro. kafka supporta anche la compattazione dei log per la compattazione delle chiavi di registrazione. la compattazione del registro significa che kafka manterrà l’ultima versione di un record ed eliminerà le versioni precedenti durante una compattazione del registro.

jean-paul azar lavora presso cloudurable . cloudurable fornisce formazione kafka, consulenza kafka, supporto kafka e aiuta a creare cluster kafka in aws .

kafka log compattazione

log compattazione mantiene almeno l’ultimo valore noto per ogni chiave di record per una singola partizione argomento. i registri compattati sono utili per ripristinare lo stato dopo un arresto anomalo o un errore di sistema.

sono utili per servizi in memoria, archivi dati persistenti,ricarica di una cache, ecc. un caso d’uso importante dei flussi di dati è quello di registrare le modifiche ai dati con chiave e mutabili in una tabella di database o modifiche all’oggetto nel microservizio in memoria.

log compattazione è un meccanismo di ritenzione granulare che mantiene l’ultimo aggiornamento per ogni chiave. un log argomento compattato log contiene un’istantanea completa dei valori di record finali per ogni chiave di record non solo le chiavi modificate di recente.

kafka log compaction consente agli utenti downstream di ripristinare il loro stato da un argomento compattato di log.

kafka log struttura di compattazione

con un registro compattato , il registro ha testa e coda. la testa del registro compattato è identica a un registro kafka tradizionale. i nuovi record vengono aggiunti alla fine della testa.

tutta la compattazione del log funziona alla coda del log. solo la coda viene compattata. i record nella coda del registro mantengono il loro offset originale quando vengono scritti dopo essere stati riscritti con la pulizia della compattazione .

kafka log compattation structure

 log compattation structure

kafka log compattation basics

tutti gli offset di log compattati rimangono validi, anche se il record all’offset è stato compattato via come un consumatore otterrà il successivo offset più alto.

kafka log compaction consente anche l’eliminazione. un messaggio con una chiave e un payload null agisce come una lapide, un marcatore di eliminazione per quella chiave. lapidi vengono cancellati dopo un periodo. la compattazione del registro viene eseguita periodicamente in background copiando nuovamente i segmenti del registro. la compattazione non blocca le letture e può essere limitata per evitare di influire sull’i / o di produttori e consumatori.

kafka log processo di compattazione

kafka log processo di compattazione

kafka log compattazione pulizia

se un consumatore kafka rimane intrappolato fino alla testa del registro, vede ogni record che viene scritto.

topic config min.compaction.lag.ms viene utilizzato per garantire un periodo minimo che deve passare prima che un messaggio possa essere compattato. il consumatore vede tutte le lapidi finché il consumatore raggiunge la testa di un registro in un periodo inferiore all’argomento config delete.retention.ms (il valore predefinito è 24 ore). log compattazione non sarà mai riordinare i messaggi, basta rimuovere alcuni. l’offset della partizione per un messaggio non cambia mai.

qualsiasi lettura consumer dall’inizio del log vede almeno lo stato finale di tutti i record nell’ordine in cui sono stati scritti.

kafka log cleaner

ricorda che un argomento kafka ha un log. un registro è suddiviso in partizioni e le partizioni sono divise in segmenti che contengono record che hanno chiavi e valori.

kafka log cleaner esegue la compattazione dei log. il pulitore di log ha un pool di thread di compattazione in background. questi thread copiano i file del segmento di registro, rimuovendo i record precedenti la cui chiave riappare di recente nel registro. ogni thread di compattazione sceglie il log dell’argomento che ha il rapporto più alto tra la testa del log e la coda del log. quindi il thread di compattazione ripristina il registro dall’inizio alla fine rimuovendo i record le cui chiavi si verificano più tardi nel registro.

mentre log cleaner pulisce i segmenti delle partizioni di log, i segmenti vengono scambiati nella partizione di log sostituendo immediatamente i segmenti più vecchi. in questo modo la compattazione non richiede il doppio dello spazio dell’intera partizione poiché lo spazio su disco aggiuntivo richiesto è solo un segmento di partizione di registro aggiuntivo: divide et impera.

config argomento per log compattazione

per attivare la compattazione per un argomento, utilizzare config argomento log.cleanup.policy=compact .

per impostare un ritardo per avviare la compattazione dei record dopo che sono stati scritti, utilizzare topic config log.cleaner.min.compaction.lag.ms . i record non verranno compattati fino a dopo questo periodo. l’impostazione offre ai consumatori il tempo di ottenere ogni record.

log compaction review

quali sono i tre modi in cui kafka può eliminare i record?

kafka può eliminare i record precedenti in base al tempo o alle dimensioni di un registro. kafka supporta anche la compattazione dei log per la compattazione delle chiavi di registrazione.

a cosa serve la compattazione dei log?

poiché la compattazione del registro mantiene l’ultimo valore noto, è un’istantanea completa dei record più recenti, è utile per ripristinare lo stato dopo un arresto anomalo o un errore di sistema per un servizio in memoria, un archivio dati persistente o ricaricare una cache. consente ai consumatori a valle di ripristinare il loro stato.

qual è la struttura di un registro compattato? descrivi la struttura.

con un registro compattato, il registro ha testa e coda. la testa del registro compattato è identica a un registro kafka tradizionale. i nuovi record vengono aggiunti alla fine della testa. tutta la compattazione del registro funziona alla coda del registro compattato.

dopo la compattazione, gli offset dei record del registro cambiano? No.

che cos’è un segmento di partizione?

ricorda che un argomento ha un log. un log argomento è suddiviso in partizioni e le partizioni sono divisi in file di segmento che contengono record che hanno chiavi e valori. i file di segmento consentono di dividere e conquistare quando si tratta di registrare la compattazione. un file segmento fa parte della partizione. mentre log cleaner pulisce i segmenti delle partizioni di registro, i segmenti vengono scambiati nella partizione di registro sostituendo immediatamente i file di segmento più vecchi. in questo modo la compattazione non richiede il doppio dello spazio dell’intera partizione poiché lo spazio su disco aggiuntivo richiesto è solo un segmento di partizione di registro aggiuntivo.

jean-paul azar lavora presso cloudurable . cloudurable fornisce formazione kafka, consulenza kafka, supporto kafka e aiuta a creare cluster kafka in aws .

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.