Apache Kafka
For en definition på højt niveau, lad os præsentere en kort definition for Apache Kafka:
Apache Kafka er en distribueret, fejltolerant, vandret skalerbar, log.
Det var nogle ord på højt niveau om Apache Kafka. Lad os forstå begreberne i detaljer her.
- Distribueret: Kafka deler de data, den indeholder, i flere servere, og hver af disse servere er i stand til at håndtere anmodninger fra klienter om den del af data, den indeholder
- Fejl tolerant: Kafka har ikke et enkelt svigtende punkt. I et SPoF-system, som en MySQL-database, skrives applikationen, hvis serveren, der er vært for databasen, går ned. I et system, der ikke har en SPoF og består af flere noder, selvom det meste af systemet går ned, er det stadig det samme for en slutbruger.
- Vandret skalerbar: Denne form for scailing refererer til at tilføje flere maskiner til eksisterende klynge. Dette betyder, at Apache Kafka er i stand til at acceptere flere noder i sin klynge og ikke give nogen nedetid for krævede opgraderinger til systemet. Se på billedet nedenfor for at forstå typen af skræmmende begreber:
- Forpligtelseslog: En forpligtelseslog er en datastruktur ligesom en sammenkædet liste. Det tilføjer uanset hvilke meddelelser der kommer til det og opretholder altid deres rækkefølge. Data kan ikke slettes fra denne log, før der er nået et bestemt tidspunkt for disse data.
Lodret og vandret scailing
Et emne i Apache Kafka er ligesom en kø, hvor meddelelser gemmes. Disse meddelelser gemmes i en konfigurerbar tid, og beskeden slettes først, før denne tid er nået, selvom den er forbrugt af alle kendte forbrugere.
Kafka er skalerbart, da det er forbrugerne, der faktisk gemmer, at hvilken besked der blev hentet af dem sidst som en 'offset' værdi. Lad os se på en figur for at forstå dette bedre:
Emnedeling og forbrugeroffset i Apache Kafka
Kom godt i gang med Apache Kafka
For at begynde at bruge Apache Kafka skal den være installeret på maskinen. For at gøre dette skal du læse Installer Apache Kafka på Ubuntu.
Sørg for, at du har en aktiv Kafka-installation, hvis du vil prøve eksempler, vi præsenterer senere i lektionen.
Hvordan virker det?
Med Kafka, Producent applikationer offentliggør Beskeder der ankommer til en Kafka Node og ikke direkte til en forbruger. Fra denne Kafka-node forbruges meddelelser af Forbruger applikationer.
Kafka Producent og Forbruger
Da et enkelt emne kan få mange data på én gang, for at holde Kafka vandret skalerbar er hvert emne opdelt i skillevægge og hver partition kan leve på enhver knudemaskine i en klynge. Lad os prøve at præsentere det:
Emne Partitioner
Igen registrerer Kafka Broker ikke, hvilken forbruger, der har brugt, hvor mange datapakker. Det er forbrugernes ansvar for at holde styr på de data, den har brugt.
Persistens til disk
Kafka fortsætter de meddelelsesregistreringer, den får fra producenter på disken, og holder dem ikke i hukommelsen. Et spørgsmål, der kan opstå, er, hvordan dette gør tingene gennemførlige og hurtige? Der var flere grunde bag dette, hvilket gør det til en optimal måde at styre meddelelsesoptegnelserne på:
- Kafka følger en protokol til gruppering af meddelelsesoptegnelserne. Producenter producerer meddelelser, der er vedvarende til disk i store bidder, og forbrugerne forbruger også disse meddelelsesoptegnelser i store lineære stykker.
- Årsagen til, at disken skriver er lineær, er at dette gør læsninger hurtigt på grund af stærkt nedsat lineær disklæsningstid.
- Lineære diskoperationer er optimeret af Operativsystemer samt ved hjælp af teknikker til bagudskrivning og read-ahead.
- Moderne OS bruger også begrebet Sidecaching hvilket betyder, at de cache nogle diskdata i gratis tilgængelig RAM.
- Da Kafka opretholder data i ensartede standarddata i hele strømmen fra producent til forbruger, benytter den sig af nul-kopi-optimering behandle.
Datadistribution og replikering
Som vi studerede ovenfor, at et emne er opdelt i partitioner, replikeres hver meddelelsespost på flere noder i klyngen for at opretholde rækkefølgen og dataene for hver post, hvis en af noderne dør.
Selvom en partition replikeres på flere noder, er der stadig en partition leder node, gennem hvilken applikationer læser og skriver data om emnet, og lederen replikerer data om andre noder, der betegnes som tilhængere af denne partition.
Hvis meddelelsesregistreringsdataene er meget vigtige for en applikation, kan garantien for, at meddelelsesregistreringen er sikker i en af knudepunkterne øges ved at øge replikationsfaktor af klyngen.
Hvad er Zookeeper?
Zookeeper er en meget fejltolerant, distribueret nøgleværdibutik. Apache Kafka afhænger stærkt af Zookeeper for at gemme klyngemekanik som hjerterytme, distribuere opdateringer / konfigurationer osv.).
Det giver Kafka-mæglerne mulighed for at abonnere på sig selv og vide, hvornår der er sket nogen ændring vedrørende en partitionsleder og nodefordeling.
Producent- og forbrugerapplikationer kommunikerer direkte med Zookeeper applikation til at vide, hvilken node der er partitionslederen for et emne, så de kan udføre læser og skriver fra partitionslederen.
Streaming
En streamprocessor er en hovedkomponent i en Kafka-klynge, der tager en kontinuerlig strøm af meddelelsesregistreringsdata fra inputemner, behandler disse data og opretter en datastrøm til outputemner, der kan være hvad som helst, fra papirkurven til en database.
Det er fuldstændigt muligt at udføre enkel behandling direkte ved hjælp af producent / forbruger-API'er, selvom Kafka til kompleks behandling som at kombinere streams leverer et integreret Streams API-bibliotek, men bemærk at denne API er beregnet til at blive brugt inden for vores egen codebase, og det gør det ikke ' ikke køre på en mægler. Det fungerer svarende til forbruger-API'en og hjælper os med at skalere strømbehandlingsarbejdet over flere applikationer.
Hvornår skal jeg bruge Apache Kafka?
Som vi studerede i ovenstående afsnit, kan Apache Kafka bruges til at håndtere et stort antal meddelelsesposter, der kan høre til et næsten uendeligt antal emner i vores systemer.
Apache Kafka er en ideel kandidat, når det kommer til at bruge en tjeneste, der kan give os mulighed for at følge begivenhedsdrevet arkitektur i vores applikationer. Dette skyldes dets egenskaber med datapretention, fejltolerant og stærkt distribueret arkitektur, hvor kritiske applikationer kan stole på dens ydeevne.
Den skalerbare og distribuerede arkitektur i Kafka gør integration med mikrotjenester meget let og gør det muligt for en applikation at afkoble sig selv med en masse forretningslogik.
Oprettelse af et nyt emne
Vi kan oprette et testemne testning på Apache Kafka-server med følgende kommando:
Opret et emne
sudo kafka-emner.sh --create --zookeeper localhost: 2181 - replikationsfaktor 1--partitioner 1 - test af emner
Her er hvad vi kommer tilbage med denne kommando:
Opret nyt Kafka-emne
Et testemne oprettes, som vi kan bekræfte med den nævnte kommando:
Bekræftelse af oprettelse af Kafka-emne
Skrivning af beskeder på et emne
Som vi studerede tidligere, er en af de API'er, der findes i Apache Kafka, den Producent API. Vi bruger denne API til at oprette en ny besked og offentliggøre det emne, vi lige har oprettet:
Skriv besked til emnet
sudo kafka-konsol-producent.sh - broker-list localhost: 9092 - emnetestningLad os se output for denne kommando:
Publicer besked til Kafka Topic
Når vi har trykket på tasten, ser vi et nyt pil (>) tegn, som betyder, at vi kan komme ud af data nu:
Indtastning af en besked
Indtast bare noget, og tryk på for at starte en ny linje. Jeg skrev 3 linjer tekst:
Læsning af beskeder fra emnet
Nu hvor vi har offentliggjort en besked om det Kafka-emne, vi oprettede, vil denne besked være der i et konfigurerbart tidsrum. Vi kan læse det nu ved hjælp af Forbruger-API:
Læsning af beskeder fra emnet
sudo kafka-konsol-forbruger.sh --zookeeper localhost: 2181 --emnetestning - fra start
Her er hvad vi kommer tilbage med denne kommando:
Kommando til at læse Besked fra Kafka Emne
Vi kan se de meddelelser eller linjer, vi har skrevet ved hjælp af Producer API som vist nedenfor:
Hvis vi skriver en ny ny besked ved hjælp af Producer API, vises den også med det samme på forbrugerens side:
Udgiv og forbrug på samme tid
Konklusion
I denne lektion kiggede vi på, hvordan vi begynder at bruge Apache Kafka, som også er en fremragende meddelelsesmægler og også kan fungere som en speciel dataudholdenhedsenhed.