6 mei 2025
Leestijd 5 min
Apache Kafka in een notendop
<span id="hs_cos_wrapper_name" class="hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text" style="" data-hs-cos-general-type="meta_field" data-hs-cos-type="text" >Apache Kafka in een notendop</span>
Share this via:

Apache Kafka is een zeer flexibel streamingplatform. Het richt zich op schaalbare, realtime gegevenspijplijnen die persistent en zeer performant zijn. Maar hoe werkt het en waarvoor gebruik je het?

Hoe werkt Apache Kafka?

Lange tijd werden applicaties gebouwd met behulp van een database waarin 'dingen' werden opgeslagen. Die dingen kunnen een bestelling zijn, een persoon, een auto ... en de database slaat ze op met een bepaalde status.

Meme databases

In tegenstelling tot deze aanpak, denkt Kafka niet in termen van 'dingen' maar in termen van 'gebeurtenissen'. Een gebeurtenis heeft ook een toestand, maar het is iets dat in een bepaalde tijd is gebeurd. Het is echter een beetje omslachtig om gebeurtenissen in een database op te slaan. Daarom gebruikt Kafka een log: een geordende opeenvolging van gebeurtenissen die ook duurzaam is.

Log demo

Ontkoppelen

Als je een systeem hebt met verschillende bronsystemen en doelsystemen, dan wil je die met elkaar integreren. Deze integraties kunnen vervelend zijn omdat ze hun eigen protocollen, verschillende gegevensformaten, verschillende gegevensstructuren, enz. hebben.

Dus binnen een systeem met 5 bron- en 5 doelsystemen zul je waarschijnlijk 25 integraties moeten schrijven. Dat kan heel snel heel ingewikkeld worden.

kafka source - target

En dit is waar Kafka om de hoek komt kijken. Met Kafka ziet het bovenstaande integratieschema er als volgt uit:

Apache Kafka

Wat betekent dat? Het betekent dat Kafka je helpt om je gegevensstromen te ontkoppelen. Bronsystemen hoeven alleen hun gebeurtenissen naar Kafka te publiceren en doelsystemen consumeren de gebeurtenissen uit Kafka. Bovenop de ontkoppeling is Apache Kafka ook zeer schaalbaar, heeft het een veerkrachtige architectuur, is het fouttolerant, is het gedistribueerd en is het zeer performant.

Onderwerpen en partities

Een topic is een bepaalde gegevensstroom en wordt geïdentificeerd door een naam. Topics bestaan uit partities. Elk bericht in een partitie wordt geordend en krijgt een incrementele ID die een offset wordt genoemd. Een offset heeft alleen betekenis binnen een specifieke partitie.

Partitions

Binnen een partitie is de volgorde van de berichten gegarandeerd. Maar wanneer je een bericht naar een topic stuurt, wordt het willekeurig toegewezen aan een partitie. Dus als je de volgorde van bepaalde berichten wilt behouden, moet je de berichten een sleutel geven. Een bericht met een sleutel wordt altijd toegewezen aan dezelfde partitie.

Berichten zijn ook onveranderlijk. Als je ze wilt wijzigen, moet je een extra 'update-bericht' sturen.

Brokers

Een Kafka-cluster bestaat uit verschillende brokers. Elke broker krijgt een ID toegewezen en elke broker bevat bepaalde partities. Als je verbinding maakt met een broker in het cluster, ben je automatisch verbonden met het hele cluster.

Kafka Cluster

Zoals je in de bovenstaande afbeelding kunt zien, wordt onderwerp 1/partitie 1 gerepliceerd in broker 2. Slechts één broker kan leider zijn voor een onderwerp/partitie. In dit voorbeeld is broker 1 de leider en broker 2 zal automatisch de gerepliceerde topic/partities synchroniseren. Dit noemen we een 'in sync replica' (ISR).

Producenten

Een producer stuurt de berichten naar het Kafka cluster om ze naar een specifiek onderwerp te schrijven. Daarom moet de producer de topicnaam en één broker kennen. We hebben al vastgesteld dat je automatisch verbinding maakt met het hele cluster als je verbinding maakt met een broker. Kafka zorgt voor de routering naar de juiste broker.

Producer scheme

Een producer kan geconfigureerd worden om een bevestiging (ACK) te krijgen van het schrijven van data:

ACK=0: producer wacht niet op bevestiging
ACK=1: de producent wacht op de bevestiging van de leidende broker
ACK=ALL: de producent wacht op de bevestiging van de leidende broker en de replicabroker.

Het is duidelijk dat een hogere ACK veel veiliger is en garandeert dat er geen gegevens verloren gaan. Aan de andere kant is het minder performant.

Consumenten

Een consumer leest data van een topic. Daarom moet de consument de naam van het onderwerp en één broker kennen. Net als bij de producenten geldt dat wanneer je verbinding maakt met één broker, je verbonden bent met het hele cluster. Ook hier zorgt Kafka voor de routering naar de juiste broker.

Consumenten lezen de berichten van een partitie in volgorde, rekening houdend met de offset. Als consumenten van meerdere partities lezen, lezen ze deze parallel.

Consumer group scheme

Consumentengroepen

Consumenten zijn georganiseerd in groepen, oftewel consumentengroepen. Deze groepen zijn nuttig om parallellisme te verbeteren. Binnen een consumentengroep leest elke consument van een exclusieve partitie. Dit betekent dat in consumentengroep 1 zowel consument 1 als consument 2 niet van dezelfde partitie kunnen lezen. Een consumentengroep kan ook niet meer consumenten dan partities hebben, omdat sommige consumenten geen partitie hebben om van te lezen.

Consumentenoffset

Als een consumer een bericht van de partitie leest, legt hij elke keer de offset vast. In het geval dat een consumer dood gaat of netwerkproblemen heeft, weet de consumer waar hij verder moet als hij weer online is.

Consumer offset

Waarom we geen berichtenwachtrij gebruiken

Er zijn enkele verschillen tussen Kafka en een message queue. Enkele belangrijke verschillen zijn dat nadat een consument van een berichtwachtrij een bericht heeft ontvangen, het uit de wachtrij wordt verwijderd, terwijl Kafka de berichten/gebeurtenissen niet verwijdert.

Hierdoor kun je meerdere consumenten op een onderwerp hebben die dezelfde berichten kunnen lezen, maar er verschillende logica op uitvoeren. Omdat de berichten persistent zijn, kun je ze ook opnieuw afspelen. Wanneer je meerdere consumenten op een berichtwachtrij hebt, passen ze over het algemeen dezelfde logica toe op de berichten en zijn ze alleen nuttig om de belasting af te handelen.

Gebruikscases voor Apache Kafka

Er zijn veel gebruikssituaties voor Kafka. Laten we enkele voorbeelden bekijken.

Telemetrie van pakketbezorging

Wanneer je iets bestelt op een webshop, krijg je waarschijnlijk een melding van de koeriersdienst met een trackinglink. In sommige gevallen kun je de chauffeur zelfs in real-time volgen op een kaart. Dit is waar Kafka om de hoek komt kijken: de bestelbus van de koerier heeft een ingebouwde GPS die zijn coördinaten regelmatig naar een Kafka-cluster stuurt. De website die je bekijkt, luistert naar die gebeurtenissen en toont je in realtime de exacte positie van de koerier op een kaart.

Website-activiteit volgen

Kafka kan worden gebruikt voor het volgen en vastleggen van website-activiteit. Gebeurtenissen zoals paginaweergaves, zoekopdrachten van gebruikers, enz. worden vastgelegd in Kafka topics. Deze gegevens worden vervolgens gebruikt voor een reeks use cases zoals real-time monitoring, real-time verwerking of zelfs het laden van deze gegevens in een data lake voor verdere offline verwerking en rapportage.

Applicatie gezondheidsmonitoring

Servers kunnen worden bewaakt en ingesteld om alarmen te activeren in geval van systeemfouten. Informatie van servers kan worden gecombineerd met de syslogs van de server en naar een Kafka-cluster worden gestuurd. Via Kafka kunnen deze onderwerpen worden samengevoegd en ingesteld om alarmen te triggeren op basis van gebruiksdrempels, met volledige informatie voor het eenvoudiger oplossen van systeemproblemen voordat ze catastrofaal worden.

Conclusie

In deze blogpost hebben we in grote lijnen uitgelegd hoe Apache Kafka werkt en waarvoor dit ongelooflijke platform kan worden gebruikt. We hopen dat je iets nieuws hebt geleerd! Als je nog vragen hebt, laat het ons dan weten. Bedankt voor het lezen!


Tim Van Laer
Tim Van Laer
Solution Engineer, ACA Group
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas