Kafka Architecture: Log Compaction

det här inlägget plockar verkligen bort från vår serie på kafka architecture som inkluderar kafka topics architecture , kafka producer architecture , kafka consumer architecture och kafka ecosystem architecture .

denna artikel är starkt inspirerad av Kafka-avsnittet om design kring timmerkomprimering . du kan tänka på det som klippan noterar om kafka-design kring timmerkomprimering .

kafka kan ta bort äldre poster baserat på tid eller storlek på en logg. kafka stöder också loggkomprimering för postnyckelkomprimering. loggkomprimering innebär att kafka behåller den senaste versionen av en post och tar bort de äldre versionerna under en loggkomprimering.

jean-paul azar arbetar på cloudurable . cloudurable ger kafka utbildning, Kafka consulting, kafka stöd och hjälper till att inrätta kafka kluster i aws .

Kafka log compaction

log compaction behåller åtminstone det senast kända värdet för varje postnyckel för en enskild ämnespartition. komprimerade loggar är användbara för att återställa tillstånd efter en krasch eller systemfel.

de är användbara för tjänster i minnet, ihållande datalager, omlastning av en cache etc. ett viktigt användningsfall för dataströmmar är att logga ändringar i Nyckel, muterbara dataändringar i en databastabell eller ändringar i objekt i mikroservice i minnet.

loggkomprimering är en granulär retentionsmekanism som behåller den senaste uppdateringen för varje nyckel. en loggkomprimerad ämneslogg innehåller en fullständig ögonblicksbild av slutliga postvärden för varje postnyckel, inte bara de nyligen ändrade tangenterna.

kafka-loggkomprimering gör det möjligt för nedströms konsumenter att återställa sitt tillstånd från ett loggkomprimerat ämne.

Kafka log compaction structure

med en komprimerad logg har loggen huvud och svans. huvudet på den komprimerade loggen är identisk med en traditionell kafka-logg. nya poster läggs till i slutet av huvudet.

all loggkomprimering fungerar vid loggens svans. endast svansen blir komprimerad. poster i loggens svans behåller sin ursprungliga förskjutning när de skrivs efter att ha skrivits om med komprimeringsrensning .

Kafka log compaction structure

log compaction structure

Kafka log compaction basics

alla komprimerade log offsets förblir giltiga, även om posten vid offset har komprimerats bort som en konsument kommer att få den näst högsta offset.

kafka loggkomprimering möjliggör också raderingar. ett meddelande med en nyckel och en null nyttolast fungerar som en gravsten, en raderingsmarkör för den nyckeln. gravstenar rensas efter en period. loggkomprimering körs regelbundet i bakgrunden genom att kopiera loggsegment igen. komprimering blockerar inte läser och kan strypas för att undvika att påverka I/o av producenter och konsumenter.

Kafka log compaction process

kafka log compaction process

Kafka log compaction cleaning

om en kafka-konsument stannar kvar i loggens huvud ser den varje post som skrivs.

topic config min.compaction.lag.ms används för att garantera en minimiperiod som måste passera innan ett meddelande kan komprimeras. konsumenten ser alla gravstenar så länge konsumenten når huvudet på en logg i en period mindre än ämnet config delete.retention.ms (standard är 24 timmar). loggkomprimering kommer aldrig att ombeställa meddelanden, bara ta bort några. partitionsförskjutning för ett meddelande ändras aldrig.

varje konsumentläsning från början av loggen ser åtminstone slutligt tillstånd för alla poster i den ordning de skrevs.

Kafka log cleaner

kom ihåg att ett kafka-ämne har en logg. en logg är uppdelad i partitioner och partitioner är indelade i segment som innehåller poster som har nycklar och värden.

Kafka log cleaner gör loggkomprimering. log cleaner har en pool av bakgrundskomprimeringstrådar. dessa trådar recopy log segmentfiler, ta bort äldre poster vars nyckel återkommer nyligen i loggen. varje komprimeringstråd väljer ämneslogg som har det högsta förhållandet mellan logghuvud och loggsvans. sedan kopierar komprimeringsgängan loggen från början till slut och tar bort poster vars nycklar inträffar senare i loggen.

när loggrensaren rensar loggpartitionssegmenten byts segmenten in i loggpartitionen och ersätter omedelbart de äldre segmenten. på så sätt kräver komprimering inte dubbelt så mycket utrymme för hela partitionen, eftersom ytterligare diskutrymme krävs är bara ytterligare ett loggpartitionssegment-divide and conquer.

ämneskonfig för loggkomprimering

för att aktivera komprimering för ett ämne, använd ämneskonfig log.cleanup.policy=compact .

för att ställa in en fördröjning för att börja komprimera poster efter att de har skrivits, använd ämneskonfig log.cleaner.min.compaction.lag.ms . poster kommer inte att komprimeras förrän efter denna period. inställningen ger konsumenterna tid att få varje post.

log compaction review

vad är tre sätt kafka kan ta bort poster?

kafka kan ta bort äldre poster baserat på tid eller storlek på en logg. kafka stöder också loggkomprimering för postnyckelkomprimering.

vad är log compaction bra för?

eftersom loggkomprimering behåller senast kända värdet är det en fullständig ögonblicksbild av de senaste posterna är det användbart för att återställa tillstånd efter en krasch eller systemfel för en i minnet tjänst, en ihållande datalager, eller omlastning av en cache. det gör det möjligt för nedströms konsumenter att återställa sitt tillstånd.

vad är strukturen för en komprimerad logg? beskriv strukturen.

med en komprimerad logg har loggen huvud och svans. huvudet på den komprimerade loggen är identisk med en traditionell kafka-logg. nya poster läggs till i slutet av huvudet. all loggkomprimering fungerar i svansen på den komprimerade stocken.

efter komprimering ändras loggpostförskjutningar? Nej.

vad är ett partitionssegment?

minns att ett ämne har en logg. en ämneslogg är uppdelad i partitioner och partitioner är indelade i segmentfiler som innehåller poster som har nycklar och värden. segmentfiler möjliggör delning och erövring när det gäller loggkomprimering. en segmentfil är en del av partitionen. när loggrensaren rensar loggpartitionssegment byts segmenten in i loggpartitionen och ersätter omedelbart de äldre segmentfilerna. på så sätt kräver komprimering inte dubbelt så mycket utrymme för hela partitionen, eftersom ytterligare diskutrymme krävs är bara ett extra loggpartitionssegment.

jean-paul azar arbetar på cloudurable . cloudurable ger kafka utbildning, Kafka consulting, kafka stöd och hjälper till att inrätta kafka kluster i aws .

Lämna ett svar

Din e-postadress kommer inte publiceras.