Apache Kafka

Apache Kafka partitionering

Apache Kafka partitionering
I denne lektion vil vi se, hvad vi mener med partitionering i Apache Kafka, og hvordan påvirker det udførelsen af ​​en Kafka-klynge. Begrebet partitionering er centralt i Kafka-klyngen, da det bruger partitionering som en primær måde at skalere og øge ydeevnen på.

Bemærk, at dette ikke er en indledende lektion. Læs hvad der er Apache Kafka, og hvordan fungerer det, inden du fortsætter med denne lektion for at få en dybere indsigt.

Emner i Kafka

Et emne i Kafka er noget, hvor en besked sendes. Forbrugerapplikationerne, der er interesserede i dette emne, trækker beskeden inde i dette emne og kan gøre noget med disse data. Op til et bestemt tidspunkt kan et hvilket som helst antal forbrugerapplikationer trække denne meddelelse et vilkårligt antal gange.

Overvej et emne som LinuxHints Ubuntu Blog-side. Lektionerne er sat i deres evighed, og et vilkårligt antal entusiastiske læsere kan komme og læse disse lektioner et vilkårligt antal gange eller gå videre til den næste lektion, som de ønsker. Disse læsere kan også være interesseret i andre emner fra LinuxHint.

Emneopdeling

Kafka er designet til at styre tunge applikationer og sætte et stort antal meddelelser i kø, som holdes inde i et emne. For at sikre høj fejltolerance er hvert emne opdelt i flere emnepartitioner, og hver emnepartition administreres på en separat node. Hvis en af ​​noderne går ned, kan en anden node fungere som emneleder og kan servere emner til de interesserede forbrugere. Sådan skrives de samme data til flere emnepartitioner:

Emne Partitioner


Nu viser ovenstående billede, hvordan de samme data replikeres på tværs af flere partitioner. Lad os visualisere, hvordan forskellige partitioner kan fungere som en leder på forskellige noder / partitioner:

Kafka Broker Partitionering

Når en klient skriver noget til et emne på en position, for hvilken Partition i mægler 0 er førende, replikeres disse data derefter på tværs af mæglere / noder, så meddelelsen forbliver sikker:

Replikering på tværs af mæglerpartitioner

Flere partitioner, højere kapacitet

Kafka gør brug af Parallelisme at levere meget høj kapacitet til producent- og forbrugerapplikationer. På samme måde opretholder det faktisk sin status som et meget fejltolerant system. Lad os forstå, hvor høj kapacitet opnås med parallelisme.

Når en producentapplikation skriver en besked til en partition i mægler 0, åbner Kafka flere tråde parallelt, så meddelelsen kan replikeres på tværs af alle de valgte mæglere på samme tid. På forbrugerens side forbruger en forbrugerapplikation beskeder fra en enkelt partition gennem en tråd. Jo mere antallet af partitioner, jo flere forbrugertråde kan åbnes, så alle sammen også kan arbejde parallelt. Dette betyder, at jo mere antallet af partitioner i en klynge, jo mere parallelitet kan udnyttes, hvilket skaber et meget højt gennemstrømningssystem.

Flere partitioner har brug for flere filhåndterere

Bare så du studerede ovenfor, hvordan vi kan øge en Kafka-systemydelse ved blot at øge antallet af partitioner. Men vi skal være forsigtige med, hvilken grænse vi bevæger os mod.

Hver emnepartition i Kafka kortlægges til et bibliotek i filsystemet til servermægleren, hvor den kører. Inden for denne logbibliotek vil der være to filer: en til indekset og en anden til de faktiske data pr. logsegment. I øjeblikket i Kafka åbner hver mægler et filhåndtag til både indekset og datafilen for hvert logsegment. Dette betyder, at hvis du har 10.000 partitioner på en enkelt mægler, vil dette resultere i 20.000 filhåndterere, der kører parallelt. Selv om dette kun handler om mæglerens konfiguration. Hvis systemet, som mægleren er implementeret i, har en høj konfiguration, vil dette næppe være et problem.

Risiko med stort antal skillevægge

Som vi så på billederne ovenfor, bruger Kafka intrakluster-replikeringsteknik til at replikere en besked fra en leder til replika-partitionerne, der ligger i andre mæglere. Både producent- og forbrugerapplikationer læser og skriver til en partition, der i øjeblikket er leder af denne partition. Når en mægler mislykkes, bliver lederen af ​​denne mægler utilgængelig. Metadataene om, hvem der er leder, opbevares i Zookeeper. Baseret på disse metadata tildeler Kafka automatisk ledelsen af ​​partitionen til en anden partition.

Når en mægler lukkes ned med en ren kommando, vil controllerknudepunktet i Kafka-klyngen flytte lederne af nedlukningsmægleren serielt i.e. en ad gangen. hvis vi overvejer at flytte en enkelt leder tager 5 millisekunder, vil ledernes utilgængelighed ikke forstyrre forbrugerne, da utilgængelighed er i en meget kort periode. Men hvis vi overvejer, når mægleren dræbes på en uren måde, og denne mægler indeholder 5000 skillevægge, og ud af disse, var 2000 skillevægslederne, at tildele nye ledere til alle disse skillevægge vil tage 10 sekunder, hvilket er meget højt, når det kommer til højt efterspurgte applikationer.

Konklusion

Hvis vi betragter som en tænker på højt niveau, fører flere partitioner i en Kafka-klynge til en højere gennemstrømning af systemet. Når man holder denne effektivitet i tankerne, skal man også overveje konfigurationen af ​​den Kafka-klynge, vi skal vedligeholde, den hukommelse, vi skal tildele den klyngen, og hvordan vi kan styre tilgængeligheden og latenstiden, hvis noget går galt.

Læs flere Ubuntu-baserede indlæg her og meget mere om Apache kafka også.

Top Oculus App Lab-spil
Hvis du er Oculus-headset-ejer, skal du være opmærksom på sideloading. Sideladning er processen med at installere ikke-butiksindhold på dit headset. S...
Top 10 spil at spille på Ubuntu
Windows-platform har været en af ​​de dominerende platforme til spil på grund af den enorme procentdel af spil, der udvikler sig i dag til indbygget a...
5 bedste arkadespil til Linux
I dag er computere seriøse maskiner, der bruges til spil. Hvis du ikke kan få den nye høje score, ved du hvad jeg mener. I dette indlæg vil du kende n...