I denne lektion vil vi se, hvad der er Apache Kafka, og hvordan fungerer det sammen med nogle af de mest almindelige brugssager. Apache Kafka blev oprindeligt udviklet på LinkedIn i 2010 og flyttede til at blive et top-niveau Apache-projekt i 2012. Det har tre hovedkomponenter:
- Udgiver-abonnent: Denne komponent er ansvarlig for at administrere og levere data effektivt på tværs af Kafka-noder og forbrugerapplikationer, der skalerer meget (som bogstaveligt).
- Tilslut API: Connect API er den mest nyttige funktion til Kafka og tillader Kafka-integration med mange eksterne datakilder og datasinker.
- Kafka Strømme: Ved hjælp af Kafka Streams kan vi overveje at behandle indgående data i skala i næsten realtid.
Vi vil studere mange flere Kafka-koncepter i de kommende sektioner. Lad os gå videre.
Apache Kafka-koncepter
Inden vi graver dybere, skal vi være grundige omkring nogle begreber i Apache Kafka. Her er de vilkår, vi bør kende meget kort:
-
- Producent: Dette er en applikation, der sender besked til Kafka
- Forbruger: Dette er et program, der bruger data fra Kafka
- Besked: Data, der sendes af producentansøgning til forbrugeransøgning via Kafka
- Forbindelse: Kafka opretter TCP-forbindelse mellem Kafka-klyngen og applikationerne
- Emne: Et emne er en kategori, som sendte data er tagget til og leveret til interesserede forbrugerapplikationer
- Emne partition: Da et enkelt emne kan få mange data på én gang, for at holde Kafka vandret skalerbar, er hvert emne opdelt i partitioner, og hver partition kan leve på enhver knudemaskine i en klynge. Lad os prøve at præsentere det:
Emne Partitioner
- Kopier: 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.
- Forbrugergrupper: Flere forbrugere, der er interesserede i det samme emne, kan opbevares i en gruppe, der betegnes som en forbrugergruppe
- Offset: Kafka er skalerbar, da det er forbrugerne, der faktisk gemmer, hvilken besked der blev hentet af dem sidst som en 'offset' værdi. Dette betyder, at for det samme emne kan Forbruger A's forskydning muligvis have en værdi på 5, hvilket betyder, at den skal behandle den sjette pakke næste, og for Forbruger B kan forskydningsværdien være 7, hvilket betyder, at den skal behandle ottende pakke næste. Dette fjernede fuldstændigt afhængigheden af selve emnet for lagring af denne metadata relateret til hver forbruger.
- Node: En knude er en enkelt servermaskine i Apache Kafka-klyngen.
- Klynge: En klynge er en gruppe noder i.e., en gruppe servere.
Konceptet for emne, emnepartitioner og offset kan også gøres klart med en illustrativ figur:
Emnedeling og forbrugeroffset i Apache Kafka
Apache Kafka som meddelelsessystem for Publish-subscribe
Med Kafka offentliggør producentapplikationerne meddelelser, der ankommer til en Kafka-node og ikke direkte til en forbruger. Fra denne Kafka-node forbruges meddelelser af forbrugerapplikationerne.
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.
Igen fører Kafka Broker ikke optegnelser over, hvilken forbruger, der har brugt, hvor mange datapakker. Det er forbrugernes ansvar for at holde styr på de data, den har brugt. På grund af grunden til, at Kafka ikke holder styr på anerkendelser og meddelelser fra hver forbrugerapplikation, kan den administrere mange flere forbrugere med ubetydelig indflydelse på gennemstrømningen. I produktionen følger mange applikationer endda et mønster af batchforbrugere, hvilket betyder, at en forbruger forbruger alle meddelelserne i en kø med jævne mellemrum.
Installation
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.
Brugssag: Sporing af brug af websteder
Kafka er et fremragende værktøj, der skal bruges, når vi har brug for at spore aktivitet på et websted. Sporingsdataene inkluderer og er ikke begrænset til sidevisninger, søgninger, uploads eller andre handlinger, som brugerne kan foretage. Når en bruger er på et websted, kan brugeren muligvis foretage et vilkårligt antal handlinger, når han / hun surfer gennem hjemmesiden.
For eksempel, når en ny bruger registrerer sig på et websted, spores aktiviteten muligvis i hvilken rækkefølge udforsker en ny bruger funktionerne på et websted, hvis brugeren indstiller deres profil efter behov eller foretrækker at springe direkte videre til funktionerne i internet side. Når brugeren klikker på en knap, samles metadataene for den knap i en datapakke og sendes til Kafka-klyngen, hvorfra analysetjenesten til applikationen kan indsamle disse data og producere nyttig indsigt i de relaterede data. Hvis vi ønsker at opdele opgaverne i trin, er det sådan, hvordan processen vil se ud:
- En bruger registrerer sig på et websted og går ind i instrumentbrættet. Brugeren prøver straks at få adgang til en funktion ved at interagere med en knap.
- Webapplikationen konstruerer en besked med denne metadata til en emnepartition af emnet "klik".
- Meddelelsen føjes til forpligtelsesloggen, og forskydningen øges
- Forbrugeren kan nu trække beskeden fra Kafka Mægleren og vise webstedsbrug i realtid og vise tidligere data, hvis den nulstiller sin forskydning til en mulig tidligere værdi
Brugssag: Beskedkø
Apache Kafka er et fremragende værktøj, der kan fungere som erstatning for meddelelsesmæglerværktøjer som RabbitMQ. Asynkron messaging hjælper med at afkoble applikationerne og skaber et meget skalerbart system.
Ligesom begrebet mikrotjenester kan vi i stedet for at bygge en stor applikation opdele applikationen i flere dele, og hver del har et meget specifikt ansvar. På denne måde kan de forskellige dele også skrives på helt uafhængige programmeringssprog! Kafka har indbygget system til partitionering, replikering og fejltolerance, der gør det godt som et stort beskedmæglersystem.
For nylig ses Kafka også som en meget god løsning til logindsamling, der kan styre logfilopsamlingsservermægler og levere disse filer til et centralt system. Med Kafka er det muligt at generere enhver begivenhed, som du vil have andre dele af din applikation at vide om.
Brug af Kafka på LinkedIn
Det er interessant at bemærke, at Apache Kafka tidligere blev set og brugt som en måde, hvorpå datarørledninger kunne gøres konsistente, og gennem hvilke data blev indtaget i Hadoop. Kafka fungerede fremragende, når flere datakilder og destinationer var til stede, og det var ikke muligt at levere en separat pipeline-proces for hver kombination af kilde og destination. LinkedIn's Kafka-arkitekt, Jay Kreps, beskriver dette velkendte problem i et blogindlæg:
Mit eget engagement i dette startede omkring 2008, efter at vi havde sendt vores nøgleværdibutik. Mit næste projekt var at forsøge at få et fungerende Hadoop-setup i gang og flytte nogle af vores anbefalingsprocesser derhen. Med lidt erfaring inden for dette område budgetterede vi naturligvis et par uger til at få data ind og ud, og resten af vores tid til implementering af smarte forudsigelsesalgoritmer. Så begyndte en lang slog.
Apache Kafka og Flume
Hvis du flytter ud for at sammenligne disse to på baggrund af deres funktioner, finder du en masse fælles funktioner. Her er nogle af dem:
- Det anbefales at bruge Kafka, når du har flere applikationer, der bruger data i stedet for Flume, som er specielt lavet til at blive integreret med Hadoop og kun kan bruges til at indtage data i HDFS og HBase. Flume er optimeret til HDFS-operationer.
- Med Kafka er det en ulempe at skulle kode producenterne og forbrugerapplikationer, mens det i Flume har mange indbyggede kilder og dræn. Dette betyder, at hvis eksisterende behov matcher Flume-funktionerne, anbefales det at du bruger Flume selv for at spare tid.
- Flume kan forbruge data under flyvning ved hjælp af interceptors. Det kan være vigtigt for datamaskering og filtrering, mens Kafka har brug for et eksternt strømbehandlingssystem.
- Det er muligt for Kafka at bruge Flume som forbruger, når vi har brug for at indtage data til HDFS og HBase. Det betyder, at Kafka og Flume integreres rigtig godt.
- Kakfa og Flume kan garantere nul datatab med den korrekte konfiguration, som det også er let at opnå. For at påpege replikerer Flume ikke hændelser, hvilket betyder, at hvis en af Flume-noder mislykkes, mister vi hændelsesadgang, indtil disken gendannes
Konklusion
I denne lektion kiggede vi på mange begreber om Apache Kafka. Læs flere Kafka-baserede indlæg her.