In deze les zullen we zien wat Apache Kafka is en hoe het werkt, samen met de meest voorkomende use-cases. Apache Kafka is oorspronkelijk ontwikkeld op LinkedIn in 2010 en is in 2012 uitgegroeid tot een Apache-project op het hoogste niveau. Het heeft drie hoofdcomponenten:
- Uitgever-abonnee: Dit onderdeel is verantwoordelijk voor het efficiënt beheren en leveren van gegevens over de Kafka-knooppunten en consumententoepassingen die veel schalen (zoals letterlijk).
- API verbinden: De Connect API is de handigste functie voor Kafka en maakt Kafka-integratie met veel externe gegevensbronnen en gegevenssinks mogelijk.
- Kafka-streams: Met Kafka Streams kunnen we overwegen om inkomende gegevens in bijna realtime op grote schaal te verwerken.
We zullen in de komende secties nog veel meer Kafka-concepten bestuderen. Laten we verder gaan.
Apache Kafka-concepten
Voordat we dieper graven, moeten we grondig zijn over enkele concepten in Apache Kafka. Dit zijn de termen die we moeten kennen, heel kort:
-
- Producent: Dit is een applicatie die een bericht naar Kafka . stuurt
- Klant: Dit is een applicatie die gegevens van Kafka . verbruikt
- Bericht: Gegevens die door de Producer-applicatie naar de Consumer-applicatie worden verzonden via Kafka
- Verbinding: Kafka brengt een TCP-verbinding tot stand tussen het Kafka-cluster en de toepassingen
- Onderwerp: Een onderwerp is een categorie waarnaar verzonden gegevens worden getagd en afgeleverd bij geïnteresseerde consumententoepassingen
- Onderwerppartitie: Aangezien een enkel onderwerp veel gegevens in één keer kan krijgen, is om Kafka horizontaal schaalbaar te houden, elk onderwerp verdeeld in partities en kan elke partitie op elke knooppuntmachine van een cluster leven. Laten we proberen het voor te stellen:
Onderwerppartities
- Replica's: Zoals we hierboven hebben bestudeerd dat een onderwerp is verdeeld in partities, wordt elk berichtrecord gerepliceerd op meerdere knooppunten van het cluster om de volgorde en gegevens van elk record te behouden voor het geval een van de knooppunten sterft.
- Consumentengroepen: Meerdere consumenten die geïnteresseerd zijn in hetzelfde onderwerp kunnen in een groep worden gehouden die een consumentengroep wordt genoemd
- offset: Kafka is schaalbaar omdat het de consumenten zijn die daadwerkelijk opslaan welk bericht het laatst door hen is opgehaald als een 'offset'-waarde. Dit betekent dat voor hetzelfde onderwerp de offset van Consument A een waarde van 5 kan hebben, wat betekent dat het vervolgens het zesde pakket moet verwerken en voor Consument B kan de offsetwaarde 7 zijn, wat betekent dat het daarna het achtste pakket moet verwerken. Dit heeft de afhankelijkheid van het onderwerp zelf volledig verwijderd voor het opslaan van deze metagegevens met betrekking tot elke consument.
- Knooppunt: Een knooppunt is een enkele servermachine in het Apache Kafka-cluster.
- TROS: Een cluster is een groep knooppunten i.e., een groep servers.
Het concept voor Topic, Topic Partitions en offset kan ook duidelijk worden gemaakt met een illustratieve figuur:
Onderwerpverdeling en consumentencompensatie in Apache Kafka
Apache Kafka als Publish-subscribe berichtensysteem
Met Kafka publiceren de Producer-toepassingen berichten die bij een Kafka-knooppunt aankomen en niet rechtstreeks bij een consument. Vanaf dit Kafka-knooppunt worden berichten gebruikt door de consumententoepassingen.
Kafka Producent en Consument
Omdat een enkel onderwerp veel gegevens in één keer kan krijgen, is om Kafka horizontaal schaalbaar te houden, elk onderwerp onderverdeeld in partities en elke partitie kan leven op elke node-machine van een cluster.
Nogmaals, Kafka Broker houdt niet bij welke consument hoeveel datapakketten heeft verbruikt. Het is de de verantwoordelijkheid van de consument om bij te houden welke gegevens zijn verbruikt. Omdat Kafka geen bevestigingen en berichten van elke consumententoepassing bijhoudt, kan het veel meer consumenten beheren met een verwaarloosbare impact op de doorvoer. In productie volgen veel applicaties zelfs een patroon van batchconsumenten, wat betekent dat een consument alle berichten in een wachtrij met een regelmatig tijdsinterval consumeert.
Installatie
Om Apache Kafka te gaan gebruiken, moet het op de machine zijn geïnstalleerd. Lees hiervoor Apache Kafka installeren op Ubuntu.
Gebruiksvoorbeeld: bijhouden van websitegebruik
Kafka is een uitstekende tool om te gebruiken wanneer we activiteit op een website moeten volgen. De trackinggegevens omvatten en zijn niet beperkt tot paginaweergaven, zoekopdrachten, uploads of andere acties die gebruikers kunnen ondernemen. Wanneer een gebruiker op een website is, kan de gebruiker een aantal acties ondernemen wanneer hij/zij door de website surft.
Wanneer een nieuwe gebruiker zich bijvoorbeeld op een website registreert, kan de activiteit worden bijgehouden in welke volgorde een nieuwe gebruiker de functies van een website verkent, of de gebruiker zijn profiel naar behoefte instelt of er de voorkeur aan geeft direct naar de functies van de website te gaan. website. Telkens wanneer de gebruiker op een knop klikt, worden de metadata voor die knop verzameld in een datapakket en verzonden naar het Kafka-cluster van waaruit de analyseservice voor de applicatie deze gegevens kan verzamelen en nuttige inzichten over de gerelateerde gegevens kan produceren. Als we de taken in stappen willen verdelen, ziet het proces er als volgt uit:
- Een gebruiker registreert zich op een website en gaat naar het dashboard. De gebruiker probeert direct toegang te krijgen tot een functie door op een knop te drukken.
- De webapplicatie construeert een bericht met deze metadata naar een onderwerppartitie van onderwerp "klik".
- Het bericht wordt toegevoegd aan het vastleggingslogboek en de offset wordt verhoogd
- De consument kan nu het bericht van de Kafka Broker ophalen en het gebruik van de website in realtime weergeven en gegevens uit het verleden weergeven als de offset wordt teruggezet naar een mogelijke waarde uit het verleden
Gebruiksvoorbeeld: berichtenwachtrij
Apache Kafka is een uitstekende tool die kan dienen als vervanging voor message broker-tools zoals RabbitMQ. Asynchrone berichten helpen bij het ontkoppelen van de applicaties en creëren een zeer schaalbaar systeem.
Net als het concept van microservices, kunnen we in plaats van één grote applicatie te bouwen, de applicatie in meerdere delen verdelen en elk deel heeft een zeer specifieke verantwoordelijkheid. Op deze manier kunnen de verschillende delen ook in volledig onafhankelijke programmeertalen worden geschreven! Kafka heeft een ingebouwd partitie-, replicatie- en fouttolerantiesysteem dat het goed maakt als een grootschalig berichtenmakelaarsysteem.
Onlangs wordt Kafka ook gezien als een zeer goede oplossing voor het verzamelen van logbestanden die de serverbroker voor het verzamelen van logbestanden kan beheren en deze bestanden aan een centraal systeem kan verstrekken. Met Kafka is het mogelijk om elke gebeurtenis te genereren waarvan u wilt dat een ander deel van uw toepassing hiervan op de hoogte is.
Kafka gebruiken op LinkedIn
Het is interessant om op te merken dat Apache Kafka eerder werd gezien en gebruikt als een manier waardoor datapijplijnen consistent konden worden gemaakt en waardoor gegevens in Hadoop werden opgenomen. Kafka werkte uitstekend wanneer meerdere databronnen en bestemmingen aanwezig waren en het bieden van een apart pijplijnproces voor elke combinatie van bron en bestemming niet mogelijk was. LinkedIn's Kafka-architect, Jay Kreps, beschrijft dit bekende probleem goed in een blogpost:
Mijn eigen betrokkenheid hierbij begon rond 2008 nadat we onze sleutelwaardewinkel hadden verscheept. Mijn volgende project was om te proberen een werkende Hadoop-setup op gang te krijgen en enkele van onze aanbevelingsprocessen daarheen te verplaatsen. Omdat we weinig ervaring op dit gebied hebben, hebben we natuurlijk een paar weken begroot voor het in- en uitchecken van gegevens, en de rest van onze tijd voor het implementeren van mooie voorspellingsalgoritmen. Dus begon een lange slog.
Apache Kafka en Flume
Als je deze twee gaat vergelijken op basis van hun functies, zul je veel gemeenschappelijke kenmerken vinden. Hier zijn er een aantal:
- Het wordt aanbevolen om Kafka te gebruiken wanneer meerdere applicaties de gegevens verbruiken in plaats van Flume, dat speciaal is gemaakt om te worden geïntegreerd met Hadoop en alleen kan worden gebruikt om gegevens op te nemen in HDFS en HBase. Flume is geoptimaliseerd voor HDFS-bewerkingen.
- Met Kafka is het een nadeel om de producenten en consumententoepassingen te moeten coderen, terwijl het in Flume veel ingebouwde bronnen en putten heeft. Dit betekent dat als bestaande behoeften overeenkomen met de functies van Flume, u wordt aanbevolen om Flume zelf te gebruiken om tijd te besparen.
- Flume kan data-in-flight verbruiken met behulp van interceptors. Het kan belangrijk zijn voor het maskeren en filteren van gegevens, terwijl Kafka een extern streamverwerkingssysteem nodig heeft.
- Het is mogelijk voor Kafka om Flume als consument te gebruiken wanneer we gegevens moeten opnemen in HDFS en HBase. Dit betekent dat Kafka en Flume echt goed integreren.
- Kakfa en Flume kunnen nul gegevensverlies garanderen met de juiste configuratie, wat ook gemakkelijk te bereiken is. Maar om erop te wijzen dat Flume geen gebeurtenissen repliceert, wat betekent dat als een van de Flume-knooppunten faalt, we de toegang tot de gebeurtenis verliezen totdat de schijf is hersteld
Conclusie
In deze les hebben we gekeken naar veel concepten over Apache Kafka. Lees hier meer op Kafka gebaseerde berichten.