Vær oppmerksom på at dette ikke er en innføringstime. Les hva som er Apache Kafka og hvordan fungerer det før du fortsetter med denne leksjonen for å få en dypere innsikt.
Emner i Kafka
Et emne i Kafka er noe der det sendes en melding. Forbrukerapplikasjonene som er interessert i dette emnet trekker meldingen inne i emnet og kan gjøre hva som helst med disse dataene. Inntil et bestemt tidspunkt kan et hvilket som helst antall forbrukerapplikasjoner trekke denne meldingen et antall ganger.
Tenk på et emne som LinuxHints Ubuntu-bloggside. Leksjonene blir satt i all evighet, og et hvilket som helst antall entusiastiske lesere kan komme og lese disse leksjonene et antall ganger eller gå til neste leksjon som de ønsker. Disse leserne kan også være interessert i andre emner fra LinuxHint.
Emne Partisjonering
Kafka er designet for å håndtere tunge applikasjoner og køer et stort antall meldinger som holdes inne i et emne. For å sikre høy feiltoleranse er hvert emne delt inn i flere emnepartisjoner, og hver emnepartisjon administreres på en egen node. Hvis en av nodene går ned, kan en annen node fungere som emneleder og kan servere emner til de interesserte forbrukerne. Slik skrives de samme dataene til flere emnepartisjoner:
Emnepartisjoner
Nå viser bildet ovenfor hvordan samme data replikeres over flere partisjoner. La oss visualisere hvordan forskjellige partisjoner kan fungere som leder på forskjellige noder / partisjoner:
Kafka Megler Partisjonering
Når en klient skriver noe til et emne på en posisjon som Partisjon i megler 0 er leder for, blir disse dataene replikert på tvers av meglerne / nodene, slik at meldingen forblir trygg:
Replikering på tvers av meglerpartisjoner
Flere partisjoner, høyere gjennomstrømning
Kafka benytter seg av Parallelisme å gi svært høy gjennomstrømning til produsent- og forbrukerapplikasjoner. Egentlig, på samme måte, opprettholder den også sin status som et høyt feiltolerant system. La oss forstå hvor høy gjennomstrømning oppnås med parallellisme.
Når en produsentapplikasjon skriver noen meldinger til en partisjon i megler 0, åpner Kafka flere tråder parallelt slik at meldingen kan replikeres på tvers av alle de valgte meglerne samtidig. På forbrukersiden bruker et forbrukerapplikasjon meldinger fra en enkelt partisjon gjennom en tråd. Jo mer antall partisjoner, jo flere forbrukertråder kan åpnes slik at alle kan fungere parallelt også. Dette betyr at jo mer antall partisjoner i en klynge, jo mer parallellitet kan utnyttes, og skape et veldig høyt gjennomstrømningssystem.
Flere partisjoner trenger flere filhåndterere
Bare så du studerte over hvordan vi kan øke ytelsen til Kafka-systemet ved bare å øke antall partisjoner. Men vi må være forsiktige med hvilken grense vi går mot.
Hver emnepartisjon i Kafka blir kartlagt til en katalog i filsystemet til servermegleren der den kjører. Innenfor loggkatalogen vil det være to filer: en for indeksen og en annen for de faktiske dataene per logg segment. For tiden åpner hver megler i Kafka et filhåndtak for både indeksen og datafilen til hvert loggsegment. Dette betyr at hvis du har 10.000 partisjoner på en enkelt megler, vil dette resultere i at 20 000 filhåndterere kjører parallelt. Selv om dette bare handler om konfigurasjonen av megleren. Hvis systemet Megleren er distribuert på har høy konfigurasjon, vil dette neppe være noe problem.
Risiko med høyt antall partisjoner
Som vi så på bildene ovenfor, bruker Kafka replikasjonsteknikk innen klyngen for å replikere en melding fra en leder til Replica-partisjonene som ligger i andre meglere. Både produsent- og forbrukerapplikasjoner leser og skriver til en partisjon som for tiden er leder for den partisjonen. Når en megler mislykkes, blir lederen på den megleren utilgjengelig. Metadataene om hvem som er leder oppbevares i Zookeeper. Basert på disse metadataene vil Kafka automatisk tildele ledelsen til partisjonen til en annen partisjon.
Når en megler blir stengt med en ren kommando, vil kontrollernoden til Kafka-klyngen flytte lederne til nedleggelsesmegleren serielt i.e. en om gangen. hvis vi vurderer å flytte en enkelt leder tar 5 millisekunder, vil ledernes utilgjengelighet ikke forstyrre forbrukerne, da utilgjengeligheten er i en veldig kort periode. Men hvis vi vurderer når Megleren blir drept på en uren måte og denne Megleren inneholder 5000 partisjoner og ut av disse, var 2000 partisjonslederne, og å tildele nye ledere for alle disse partisjonene vil ta 10 sekunder, noe som er veldig høyt når det gjelder høyt etterspurte applikasjoner.
Konklusjon
Hvis vi betrakter som en tenker på høyt nivå, fører flere partisjoner i en Kafka-klynge til en høyere gjennomstrømning av systemet. Når man holder denne effektiviteten i bakhodet, må man også vurdere konfigurasjonen til Kafka-klyngen vi trenger for å opprettholde, minnet vi trenger å tilordne den klyngen og hvordan vi kan håndtere tilgjengeligheten og ventetiden hvis noe går galt.
Les mer Ubuntu-baserte innlegg her og mye mer om Apache kafka også.