• Blog
  • Info Support
  • Career
  • Training
  • International Group
  • Info Support
  • Blog
  • Career
  • Training
  • International Group
  • Search
logo InfoSupport
  • Latest blogs
  • Popular blogs
  • Experts
      • All
      • Bloggers
      • Speakers
  • Meet us
  • About us
    • nl
    • en
    • .NET
    • 3D printing
    • Advanced Analytics
    • Agile
    • Akka
    • Alexa
    • Algorithms
    • Api's
    • Architectuur
    • Artificial Intelligence
    • ATDD
    • Augmented Reality
    • AWS
    • Azure
    • Big Data
    • Blockchain
    • Business Intelligence
    • Chatbots
    • Cloud
    • Code Combat
    • Cognitive Services
    • Communicatie
    • Containers
    • Continuous Delivery
    • CQRS
    • Cyber Security
    • Dapr
    • Data
    • Data & Analystics
    • Data Science
    • Data Warehousing
    • Databricks
    • DataOps
    • Developers life
    • DevOps
    • Digital Days
    • Digital Twin
    • Docker
    • eHealth
    • Enterprise Architecture
    • Event Sourcing
    • Hacking
    • Infrastructure & Hosting
    • Innovatie
    • Integration
    • Internet of Things
    • Java
    • Machine Learning
    • Microservices
    • Microsoft
    • Microsoft Bot Framework
    • Microsoft Data Platform
    • Mobile Development
    • Mutation Testing
    • Open source
    • Pepper
    • Power BI
    • Privacy & Ethiek
    • Python
    • Quality Assistance & Test
    • Quality Assurance & Test
    • Requirements Management
    • Scala
    • Scratch
    • Security
    • SharePoint
    • Software Architecture
    • Software development
    • Software Factory
    • SQL Server
    • SSL
    • Start-up
    • Startup thinking
    • Stryker
    • Test Quality
    • Testing
    • TLS
    • TypeScript
    • Various
    • Web Development
    • Web-scale IT
    • Xamarin
    • All
    • Bloggers
    • Speakers
Home » Apache Kafka uitgelegd
  • Apache Kafka uitgelegd

    • By Luc Klaassen
    • Architectuur 4 years ago
    • Architectuur 0 comments
    • Architectuur Architectuur
    Apache Kafka uitgelegd

    In dit artikel wordt kort uitgelegd hoe apache kafka onder water in elkaar zit. Handig voor nieuwe gebruikers om kort alle informatie bij elkaar te hebben, of voor bestaande gebruikers die een refresher nodig hebben van de internals.

    Basics

    Kafka is een geclusterde messaging bus die het mogelijk maakt om grote hoeveelheden aan messages af te handelen. Binnen Kafka wordt per topic een commit log bijgehouden. Producers kunnen aan een topic messages toevoegen en consumers kunnen deze nieuwe messages ophalen als ze aangeven de topic te willen volgen. Een node binnen een Kafka cluster wordt een broker genoemd.

    Topics en partitions

    Een topic is een categorie of onderwerp waar messages naar gepubliceerd worden. Voor elk topic wordt een gepartitioneerde log bijgehouden die er ongeveer zo uit ziet:

    De samenvoeging van deze partities maakt een complete topic log. Elke partitie is een geordende lijst met messages, waarover alle messages van een topic worden verdeeld.

    Het gebruik van deze partities maakt het ook makkelijker om de load te balancen over consumer groups. Dit wordt later verder uitgelegd.

    Messages

    Elke message krijgt een offset toegewezen die de message uniek maakt binnen een partitie en de volgorde van de messages bijhoudt. Aan de hand van deze offset worden ook messages opgehaald door consumers.

    Messages worden voor een vaste tijd bijgehouden. Deze tijd kan geconfigureerd worden. Ook als de message door alle consumers is opgehaald zal hij tot de vastgestelde tijd bewaard worden. Daarna zal hij verwijderd worden om ruimte vrij te maken.

    Distributie van messages

    De partities worden over de brokers verspreid zodat elke server zijn deel van de data en requests kan afhandelen. Elke partitie wordt over een instelbare hoeveelheid brokers gerepliceerd om de fouttolerantie te verlagen.

    Elke partitie heeft een “leader” binnen de cluster die alle read en write requests afhandelt, terwijl zijn “followers” passief de partitie repliceren. Als een leader wegvalt zal een nieuwe broker zijn plek als leader innemen.

    Producers

    Kafka brokers hebben altijd de metadata beschikbaar over waar leaders van een partitie te vinden zijn. Een producer bepaalt zelf naar welke partitie hij zijn informatie stuurt, nadat hij de metadata over de partitie leaders heeft opgehaald bij een broker. Het bepalen naar welke partitie de message wordt gestuurd kan op verschillende manieren gebeuren. Het kan gedaan worden door bijvoorbeeld een round-robin pool, of door een semantische partitie functie.

    Om samen te vatten:

    Topics zijn te vinden binnen het gehele Kafka cluster, en niet op specifieke brokers.

    Topics zijn opgesplitst in partities. Dit zijn delen van de commit log. Elke partitie staat op een broker die is aangeduid als de leader.

    Naast een leader zijn er ook een aantal followers, die een kopie van de partitie bijhouden. Zij handelen echter geen reads en writes af, maar zijn er enkel voor het geval de leader wegvalt, waarna ze zijn plek innemen.

    Een broker bevat meerdere partities.

    Stap voor stap zal het opslaan van een nieuwe message als volgt gaan:

    1. De producer haalt bij zijn bekende broker de lijst met metadata over partition leaders op.
    2. De producer bepaalt aan de hand van een partition key of algoritme naar welke partitie hij zijn message stuurt.
    3. Het message komt aan bij de broker en wordt daar gepersisteerd op disk.
    4. De broker stuurt de message naar alle replica’s die er bestaan van de partitie.
    5. De replica’s sturen een bevestiging dat de message is toegevoegd.

    Vanaf hier wordt het afhankelijk van de synchronisatievorm hoe het verder verloopt.

    6a. Als de primary-backup replicatie wordt gebruikt, wanneer alle replica’s hebben laten weten dat de message succesvol is opgeslagen, zal de broker een bevestiging naar de producer sturen. Als een van de replica’s faalt zal hij uit de lijst met replica’s worden gegooid. Hij kan deze lijst weer terug joinen als hij weer terug up to date is.

    6b. Met de quorum-based aanpak wacht de broker tot een bepaald aantal van de replica’s up to date is. Dit aantal replica’s veranderd niet als er replica’s uitvallen. Als er dus te weinig replica’s up zijn, zal de message nooit doorgevoerd worden.

    Zookeeper

    De rol van Zookeeper is het beheren van een cluster van Kafka nodes. Zookeeper houdt ook informatie bij over de locaties van partities, en de bijbehorende leaders. Ook handelt Zookeeper het kiezen van een nieuwe leader broker af.

    Hiernaast houdt Zookeeper de verbindingen van consumers met brokers bij. Zookeeper zorgt ervoor dat consumers binnen een consumer group verdeeld worden over de partities van een topic en dat consumers opnieuw verdeeld worden bij het wegvallen van een consumer of broker.

    Consumers

    Binnen Kafka bestaan er consumer groups. Een consumer group is een logische consumer van berichten. Een consumer binnen deze group is een instantie of thread van deze logische consumer. Alle consumers binnen een consumer group krijgen berichten binnen. Elke consumer binnen een consumergroup krijgt een partitie toegewezen van een topic. Dit houdt ook in dat er niet meer consumers binnen een consumer group kunnen zitten dan dat er partities zijn van het topic.

    Het is handig om te weten dat messages binnen een partitie gesorteerd zijn op offset. Als een topic over meerdere partities verdeeld is, zijn de messages alleen binnen deze partitie geordend. Als het belangrijk is dat alle messages op volgorde blijven, kan er dus maar een partitie aangemaakt worden. Dit zal het echter onmogelijk maken om parallel te werken.

    Share this

Luc Klaassen

View profile

Related blogs

  • Innovative patterns in software quality management

    Innovative patterns in software quality management Tom van den Berg - 9 months ago

  • Connect a qpid dispatch router to Azure

    Connect a qpid dispatch router to Azure Tom van den Berg - 1 year ago

  • Building an integration platform based on an open stand…

    Building an integration platform based on an open stand… Tom van den Berg - 1 year ago

Data Discovery Channel

  • Modern Data Platform

  • Gartner Data & Analytics Summit 2022

  • De Data Architecture ®Evolution

Nieuwsbrief

* verplichte velden

Contact

  • Head office NL
  • Kruisboog 42
  • 3905 TG Veenendaal
  • T +31 318 552020
  • Call
  • Mail
  • Directions
  • Head office BE
  • Generaal De Wittelaan 17
  • bus 30 2800 Mechelen
  • T +32 15 286370
  • Call
  • Mail
  • Directions

Follow us

  • Twitter
  • Facebook
  • Linkedin
  • Youtube

Newsletter

Sign in

Extra

  • Media Library
  • Disclaimer
  • Algemene voorwaarden
  • ISHBS Webmail
  • Extranet
Beheer cookie toestemming
Deze website maakt gebruik van Functionele en Analytische cookies voor website optimalisatie en statistieken.
Functioneel Always active
De technische opslag of toegang is strikt noodzakelijk voor het legitieme doel het gebruik mogelijk te maken van een specifieke dienst waarom de abonnee of gebruiker uitdrukkelijk heeft gevraagd, of met als enig doel de uitvoering van de transmissie van een communicatie over een elektronisch communicatienetwerk.
Voorkeuren
De technische opslag of toegang is noodzakelijk voor het legitieme doel voorkeuren op te slaan die niet door de abonnee of gebruiker zijn aangevraagd.
Statistieken
De technische opslag of toegang die uitsluitend voor statistische doeleinden wordt gebruikt. De technische opslag of toegang die uitsluitend wordt gebruikt voor anonieme statistische doeleinden. Zonder dagvaarding, vrijwillige naleving door uw Internet Service Provider, of aanvullende gegevens van een derde partij, kan informatie die alleen voor dit doel wordt opgeslagen of opgehaald gewoonlijk niet worden gebruikt om je te identificeren.
Marketing
De technische opslag of toegang is nodig om gebruikersprofielen op te stellen voor het verzenden van reclame, of om de gebruiker op een website of over verschillende websites te volgen voor soortgelijke marketingdoeleinden.
Manage options Manage services Manage vendors Read more about these purposes
Voorkeuren
{title} {title} {title}