Apache Kafka Quickstart - Installeer Kafka 4.2 met CLI en lokale voorbeelden

Installeer Kafka 4.2 en stream events in enkele minuten.

Inhoud

Apache Kafka 4.2.0 is de momenteel ondersteunde releaseversie en vormt de beste basis voor een moderne Quickstart, omdat Kafka 4.x volledig zonder ZooKeeper werkt en standaard rond KRaft is gebouwd.

Deze gids is een praktische, commandoregel-georiënteerde Quickstart: het installeren van Kafka, het starten van een lokale broker, het leren van de essentiële Kafka CLI-tools en het afsluiten met twee end-to-end-voorbeelden die je direct in je terminal kunt plakken.

distributed message processing infographic apache kafka

Wat Apache Kafka is en waar het voor wordt gebruikt

Apache Kafka is een event streaming platform. In praktische termen betekent event streaming het vastleggen van gebeurtenisgegevens in realtime vanuit bronnen (databases, sensoren, apps), het duurzaam opslaan van de resulterende streams en het verwerken of routeren ervan in realtime (of later).

Kafka brengt drie kernfunctionaliteiten samen in één platform: publiceren en abonnementen op streams van gebeurtenissen, duurzaam opslaan van streams zolang nodig en verwerken van streams terwijl ze plaatsvinden of achteraf. Deze combinatie is de reden waarom Kafka wordt gebruikt voor realtime datapipelines, integratie, messaging en streaming analytics.

Voor context over waar Kafka past binnen een bredere data-infrastructuur, zie de Data Infrastructuur voor AI-systemen: Objectopslag, Databases, Zoeken & AI Data Architectuur-sectie, die S3-compatibele objectopslag, PostgreSQL-architectuur, Elasticsearch-optimalisatie en AI-native datalagen behandelt.

Als je op AWS bouwt en een beheerde alternatief nodig hebt, behandelt Event-Driven Microservices bouwen met AWS Kinesis het implementeren van event-driven microservices met Kinesis Data Streams.

Voor stateful stream processing met Kafka, zie Apache Flink op K8s en Kafka: PyFlink, Go, operaties en beheerde prijzen.

Voor diensten die naar een database schrijven voordat ze naar Kafka publiceren, zorgt het transactionele outbox-patroon ervoor dat gebeurtenissen nooit verloren gaan tussen de database-commit en de Kafka-produce-aanroep.

Operationeel is Kafka een gedistribueerd systeem van servers en clients die communiceren via een high-performance TCP-protocol: brokers slaan gegevens op en dienen ze uit; clients (producenten en consumenten) schrijven en lezen gebeurtenissen, vaak op grote schaal en met fouttolerantie.

Enkele concepten die je in de CLI steeds zult tegenkomen:

  • Topics organiseren gebeurtenissen. Een topic is multi-producer en multi-subscriber, en gebeurtenissen kunnen meerdere keren worden gelezen omdat retentie bepaalt wanneer oude gegevens worden verwijderd.
  • Partities verdelen een topic over brokers voor schaalbaarheid; volgorde is gegarandeerd per partitie.
  • Replicatiefactor regelt fouttolerantie. Documentatievoorbeelden adviseren vaak replicatiefactoren van 2 of 3 in productie (een single-node dev Quickstart gebruikt typisch 1).

Apache Kafka installeren

De officiële Quickstart van Kafka gebruikt de binaire release (tarball) of het officiële Docker-image. Beide zijn geschikt voor lokale ontwikkeling.

Vereisten die je niet moet overslaan

Kafka 4.x vereist moderne Java: voor de server en tools is Java 17+ de basis voor lokaal draaien, en Kafka 4.0 heeft Java 8-ondersteuning verwijderd.

Als je Kafka speciaal installeert om het te leren, streef dan naar een ondersteunde JDK zoals Java 17 of 21. De Java-ondersteuningspagina van Kafka lijst Java 17, 21 en 25 op als volledig ondersteund, terwijl Java 11 alleen wordt ondersteund voor een subset van modules (clients en streams).

Installeren vanuit de officiële binaire release

De officiële Quickstart voor Kafka 4.2.0 begint met het downloaden en extraheren van de binaire distributie:

tar -xzf kafka_2.13-4.2.0.tgz
cd kafka_2.13-4.2.0

Notities voor gevorderde lezers:

  • De “2.13” in de bestandsnaam weerspiegelt de Scala-buildlijn. Voor Kafka 4.x-binaries is Scala 2.13 de primaire distributielijn, en Kafka 4.0 heeft Scala 2.12-ondersteuning verwijderd.
  • Als je zorg draagt voor supply-chain-integriteit, documenteert de downloadpagina expliciet dat je downloads kunt verifiëren met behulp van de gepubliceerde procedures en KEYS van Apache.

Installeren met Docker

Kafka biedt ook officiële Docker-images op Docker Hub. De Quickstart toont aan dat je Kafka 4.2.0 als volgt kunt pullen en draaien:

docker pull apache/kafka:4.2.0
docker run -p 9092:9092 apache/kafka:4.2.0

Er is ook een “native” imagelijn (gebaseerd op GraalVM native image). De Kafka-documentatie en het Kafka Improvement Proposal voor deze imagelijn beschrijven deze als experimenteel en bedoeld voor lokale ontwikkeling en testen, niet voor productie.

Platformopmerking voor Windows-gebruikers

Kafka-distributies bevatten Windows-scripts (batch-bestanden). De Kafka-documentatie merkt historisch op dat op Windows je bin\windows\ en .bat-scripts gebruikt in plaats van de Unix bin/ .sh-scripts.

Start Kafka lokaal met KRaft

Als je vraagt “Heb ik ZooKeeper nodig om Apache Kafka te draaien”, is het moderne antwoord nee. Kafka 4.0 is de eerste major release die is ontworpen om volledig zonder ZooKeeper te werken, en draait standaard in KRaft-modus, wat het operationele overhead vermindert voor lokaal en productiegebruik.

Start een single-node lokale broker vanuit de geëxtraheerde tarball

De Kafka 4.2 Quickstart gebruikt drie commando’s:

  1. Genereer een cluster UUID
  2. Formatteer de logdirectories
  3. Start de server
# Generate a Cluster UUID
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"

# Format Log Directories (standalone local format)
bin/kafka-storage.sh format --standalone -t "$KAFKA_CLUSTER_ID" -c config/server.properties

# Start the Kafka broker
bin/kafka-server-start.sh config/server.properties

Waarom de “format”-stap belangrijk is in KRaft: De KRaft-operatiedocumentatie van Kafka legt uit dat kafka-storage.sh random-uuid de cluster-ID genereert en dat elke server moet worden geformatteerd met kafka-storage.sh format. Een van de redenen is dat automatische formatting fouten kan verbergen, vooral rond de metadata-log, dus expliciete formatting wordt voorafkeurd.

Wat je draait in deze Quickstart

Voor lokale ontwikkeling kan Kafka draaien in een vereenvoudigde “gecombineerde” opstelling (controllers en brokers samen). De KRaft-documentatie van Kafka noemt gecombineerde servers als eenvoudiger voor ontwikkeling, maar niet aanbevolen voor kritieke deployment-omgevingen (waar je controllers geïsoleerd en onafhankelijk schaalbaar wilt hebben).

Voor “echte” clusters zijn KRaft-controllers en brokers aparte rollen (process.roles), en controllers worden typisch deployed als een quorum van 3 of 5 nodes (beschikbaarheid hangt af van een meerderheid die levend is).

Kafka CLI-essentials en belangrijkste commandoregelparameters

Kafka wordt geleverd met veel CLI-tooling onder bin/. De officiële operatiedocumenten benadrukken twee nuttige eigenschappen:

  • De veelgebruikte tools staan in de bin/-directory van de distributie.
  • Elke tool print zijn volledige commandoregelgebruik wanneer hij zonder argumenten wordt uitgevoerd.

Ook belangrijk voor Kafka 4.x: AdminClient-commando’s accepteren --zookeeper niet meer. De compatibiliteitsdocumentatie van Kafka merkt op dat je vanaf Kafka 4.0 --bootstrap-server moet gebruiken om met het cluster te communiceren.

Kafka-verbindingvlaggen die je constant zult gebruiken

De meeste tools hebben een cluster-ingangspunt nodig:

  • --bootstrap-server host:port
    Gebruik dit voor topic-operaties, consumer groups en de meeste broker-gerichte commando’s. Het is de canonieke vervanging voor ZooKeeper-gebaseerde admin-workflows in Kafka 4.x.

KRaft introduceert broker versus controller-endpoints voor sommige tools. Bijvoorbeeld, kafka-features.sh en delen van de metadata-tooling kunnen controller-endpoints gebruiken, terwijl veel admin-operaties broker-endpoints gebruiken. De KRaft-operatiepagina toont beide stijlen in voorbeelden.

Topicbeheer met kafka-topics.sh

Je zult kafka-topics.sh gebruiken voor de kern lifecycle:

  • Maak, beschrijf en list topics (Quickstart toont --create, --describe, --topic).
  • Specificeer schaal en duurzaamheid via partities en replicatiefactor. De operatiegids toont --partitions en --replication-factor en legt uit hoe ze schaalbaarheid en fouttolerantie beïnvloeden.
  • Voeg per-topic overrides toe bij het maken met --config key=value (topic config docs tonen concrete voorbeelden).

Een goed “productie-gericht” create-commando ziet er zo uit (deze exacte vorm wordt gebruikt in de officiële operatiedocumenten):

bin/kafka-topics.sh --bootstrap-server localhost:9092 \
  --create --topic my_topic_name \
  --partitions 20 --replication-factor 3 \
  --config x=y

Produceren en consumeren met console-clients

De Quickstart gebruikt de console producer en consumer omdat ze snel zijn voor validatie en smoke tests:

  • kafka-console-producer.sh --topic ... --bootstrap-server ...
  • kafka-console-consumer.sh --topic ... --from-beginning --bootstrap-server ...

Kafka 4.2 bevat ook CLI-consistentieverbeteringen. In de upgrade-notes:

  • kafka-console-producer deprecateert --max-partition-memory-bytes en adviseert --batch-size in plaats daarvan.
  • kafka-console-consumer deprecateert --property (formatter-eigenschappen) ten gunste van --formatter-property.
  • kafka-console-producer deprecateert --property (message reader-eigenschappen) ten gunste van --reader-property.

Als je interne runbooks onderhoudt, zijn deze notes nu de moeite waard om te updaten, voordat Kafka 5.0 de gedeprecateerde vlaggen verwijdert.

Inspecteren van consumer lag met kafka-consumer-groups.sh

Voor echte systemen is “Houdt mijn consumer de tempo aan” een dagelijkse vraag. De operatiegids demonstreert:

  • List groups: --list
  • Beschrijf een group met offsets en lag: --describe --group ...
  • Beschrijf members en assignments: --members en --verbose
  • Verwijder groups: --delete
  • Reset offsets veilig: --reset-offsets

Voorbeeld:

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group

Eén config-opmerking voor lokale Docker en remote clients

Als je Kafka in containers draait of achter load balancers, zul je uiteindelijk de behoefte hebben om listeners correct te zetten. De broker-configdocumentatie van Kafka legt advertised.listeners uit als de adressen die brokers aan clients en andere brokers adverteren, met name wanneer het bind-adres niet het adres is dat clients moeten gebruiken.

Quickstart-voorbeelden die je nu kunt uitvoeren

De onderstaande voorbeelden zijn bewust CLI-gebaseerd, zodat je een lokale Kafka-opstelling kunt valideren voordat je applicatiecode schrijft.

Voorbeeld: Voer een topic uit en stream berichten end-to-end

Dit is de canonieke “create, produce, consume” flow van de Kafka 4.2 Quickstart.

Open terminal A en maak een topic:

bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092

Beschrijf het nu (optioneel maar nuttig als je partities en replicatiefactor leert kennen):

bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092

Open terminal B en start een producer:

bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092

Typ een paar regels (elke regel wordt een gebeurtenis), en laat de producer draaien:

This is my first event
This is my second event

Open terminal C en start een consumer vanaf het begin:

bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092

Je zou dezelfde regels moeten zien.

Waarom dit valideert meer dan “het werkt”: De Quickstart van Kafka legt uit dat brokers gebeurtenissen duurzaam opslaan en dat gebeurtenissen meerdere keren en door meerdere consumers kunnen worden gelezen. Die duurzaamheid is de reden waarom dit Quickstart-patroon het eerste is dat je moet doen na elke installatie of upgrade.

Voorbeeld: Voer een eenvoudige Kafka Connect pipeline uit van file naar topic naar file

Kafka Connect beantwoordt de terugkerende vraag “Hoe verplaats ik data in en uit Kafka zonder custom producers en consumers voor alles te schrijven”. Het Kafka Connect-overzicht beschrijft het als een tool voor schaalbare, betrouwbare streaming tussen Kafka en andere systemen, via connectors.

De Kafka 4.2 Quickstart bevat een minimale, lokale Connect demo met behulp van de file source en sink connectors.

Vanaf je Kafka-directory, stel eerst het worker plugin path in om de meegeleverde file connector jar op te nemen:

echo "plugin.path=libs/connect-file-4.2.0.jar" >> config/connect-standalone.properties

Maak een klein input-bestand:

echo -e "foo\nbar" > test.txt

Start de Connect worker in standalone-modus met zowel een source- als sink-connectorconfiguratie:

bin/connect-standalone.sh \
  config/connect-standalone.properties \
  config/connect-file-source.properties \
  config/connect-file-sink.properties

Wat er moet gebeuren (en waarom het nuttig is):

  • De source connector leest regels uit test.txt en produceert ze naar het topic connect-test.
  • De sink connector leest uit connect-test en schrijft naar test.sink.txt.

Verifieer het sink-bestand:

more test.sink.txt

Je zou dit moeten zien:

foo
bar

Je kunt het topic ook direct verifiëren:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic connect-test --from-beginning

Dit tweede voorbeeld is een uitstekende spiergeheugentrainer omdat het je ook leert waar Connect-configuratie zit (worker-config plus connector-configs) en een minimale “ingest, store, export”-lus toont.

Probleemoplossing en vervolgstappen

De meeste “Kafka Quickstart start niet” problemen vallen binnen een klein aantal oorzaken.

Broker start niet

Begin met de officiële vereisten:

  • De Kafka 4.2 Quickstart vereist expliciet Java 17+. Als je op een oudere JDK zit, los dat eerst op.
  • In KRaft-modus is het formatteren van opslag een vereiste expliciete stap. Als je kafka-storage.sh format overslaat, zul je waarschijnlijk startfouten of metadata-fouten zien.

Als je hebt geëxperimenteerd en nu een schone slate wilt, toont de Quickstart van Kafka hoe je de lokale datadirectories die in de demo worden gebruikt, kunt verwijderen:

rm -rf /tmp/kafka-logs /tmp/kraft-combined-logs

CLI-commando’s falen terwijl de broker draait

In Kafka 4.x, valideer dat je --bootstrap-server gebruikt (niet --zookeeper). De compatibiliteitsdocumentatie van Kafka noemt expliciet de verwijdering van --zookeeper uit AdminClient-commando’s vanaf Kafka 4.0.

Docker-netwerk verrassingen

Als Kafka in Docker zit en je cliënttool buiten Docker (of op een andere machine) is, heb je mogelijk correcte listener-advertentie nodig. De broker-configdocumentatie legt uit dat advertised.listeners wordt gebruikt wanneer de adressen waarnaar clients moeten verbinden verschillen van de bind-adressen (listeners).

Waar naartoe na de Quickstart

Als je de voorbeelden in dit post hebt voltooid, heb je al de meest voorkomende eerste zoekopdrachten beantwoord:

  • wat Kafka wordt gebruikt voor (event streaming end-to-end)
  • hoe je Kafka lokaal installeert (tarball of Docker)
  • waarom ZooKeeper weg is en KRaft de default is in 4.x
  • welke CLI-tools dag-tot-dag belangrijk zijn (topics, producer, consumer, groups)

Vanaf hier zijn de meest waardevolle vervolgstappen meestal:

  • Lees Kafka’s “Introduction” voor diepere mentale modellen van topics, partities en replicatie.
  • Verken de Kafka Streams Quick Start als je een eerste verwerkingsapplicatie wilt (de Streams Quickstart demonstreert het draaien van de WordCount-demo en het inspecteren van resultaten met de console consumer).

Abonneren

Ontvang nieuwe berichten over systemen, infrastructuur en AI-engineering.