1. Introduction
Si vous souhaitez apprendre à configurer Apache Kafka à l’aide de Docker Compose , vous êtes au bon endroit 🙂
Dans cet article, nous allons ensemble :
- voir la configuration minimale de Docker Compose que nous devons fournir pour créer un environnement avec exactement un courtier Kafka et une instance Zookeeper ,
- regardez de plus près les configurations requises,
- vérifiez notre configuration à l’aide des outils Console Producer et Consumer.
Si vous apprécierez ce tutoriel, je vous encourage vivement à consulter les suites :
Dans mes articles, je me concentre sur la pratique et sur la réalisation des choses.
Cependant, si vous souhaitez bien comprendre les concepts DevOps, qui sont de plus en plus demandés de nos jours, je vous recommande fortement de consulter les cours KodeKloud, comme ce parcours d’apprentissage Docker et Kubernetes.
2. Qu’est-ce qu’Apache Kafka ?
Avant de commencer, je me sens obligé de fournir au moins une brève explication de ce que sont Apache Kafka et Zookeeper. Veuillez ignorer les deux paragraphes suivants si vous souhaitez passer directement à la partie pratique de ce didacticiel.
Eh bien, Apache Kafka est par définition une plate-forme de streaming d’événements distribués open source. En termes simples, il s’agit d’une plate-forme largement utilisée pour travailler avec des pipelines de données en streaming en temps réel et pour intégrer des applications permettant de travailler avec de tels flux. Il est principalement responsable de :
- publier/s’abonner au flux d’enregistrements,
- leur traitement en temps réel,
- et leur stockage ordonné
Mais soyons honnêtes : il est presque impossible de décrire Kafka en quelques phrases et je vous encourage vivement à visiter la page d’introduction d’Apache après ce didacticiel ici.
3. Qu’est-ce qu’Apache ZooKeeper ?
Ou la question devrait plutôt être : pourquoi ai-je besoin d’un autre service pour travailler avec Apache Kafka ?
Tout comme un gardien de zoo s’occupe des animaux, Apache Zookeeper « prend soin » de tous les courtiers Kafka d’un cluster. Il est principalement responsable de :
- suivre l’état du cluster – par exemple quels courtiers font partie du cluster, envoyer des notifications à Kafka en cas de changement
- configuration des sujets
- élection du contrôleur
- listes de contrôle d’accès et quotas
Néanmoins, gardez à l’esprit que l’équipe Kafka travaille constamment au remplacement de ZooKeeper par Apache Kafka Raft (KRaft) . Pour être plus précis, la version 2.8.0 a introduit un accès anticipé à cette fonctionnalité, mais au moment de la publication de cet article, elle n’est toujours pas prête pour la production.

4. Composition minimale de Kafka Docker
Cela étant dit, jetons un coup d’Å“il à la version minimale du fichier docker-compose.yml. Cette configuration est nécessaire pour lancer exactement 1 instance Kafka et Zookeeper :
version: '3' services: zookeeper:
image: confluentinc/cp-zookeeper:7.2.1
container_name: zookeeper
environment: ZOOKEEPER_CLIENT_PORT: 2181
kafka: image: confluentinc/cp-kafka:7.2.1
container_name: kafka ports: - "8098:8098" depends_on: - zookeeper
environment: KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:8098
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
Encore une fois, avant de passer aux commandes suivantes, prenons quelques minutes pour comprendre ce qui se passe exactement ici.
4.1. Version des images Docker et conteneurs
Tout d’abord, jetons un Å“il à ce morceau de code :
version: '3' services: zookeeper: image: confluentinc/cp-zookeeper:7.2.1 container_name: zookeeper ... kafka: image: confluentinc/cp-kafka:7.2.1 container_name: kafka
Comme nous pouvons le voir, avec cette configuration, nous allons lancer deux services nommés kafkaet zookeeper. Le container_namedéfinira les noms spécifiés pour nos conteneurs, au lieu de laisser Docker les générer. Enfin, nous utiliserons les versions 7.2.1 de Confluent Community Docker Image pour Apache Kafka et Confluent Docker Image pour Zookeeper .
4.2. Configurations supplémentaires du conteneur Kafka
Comme prochaine étape, jetons un coup d’Å“il rapide à ces quatre lignes :
ports: - "8098:8098" depends_on: - zookeeper
Comme son nom l’indique, la commande ports est responsable de l’exposition des ports, donc avec ce paramètre, le port 8098 de notre conteneur sera accessible via le port 8098 de la machine hôte. De plus, le depend_on veillera à démarrer le conteneur zookeeper avant le kafka.
5. Paramètres requis
À l’étape suivante, examinons de plus près les paramètres requis pour Kafka et Zookeeper dans nos paramètres Docker Compose.
5.1. Paramètres requis du gardien de zoo
Comme nous pouvons le voir dans notre exemple, le seul environnement que nous avons spécifié est ZOOKEEPER_CLIENT_PORT . Celui-ci indique à Zookeeper où il doit écouter les connexions des clients – Kafka dans notre cas.
De plus, lors de l’exécution en mode cluster, nous devons définir le ZOOKEEPER_SERVER_ID (mais ce n’est pas le cas ici).
5.2. Paramètres Kafka confluents requis
En ce qui concerne l’image Confluent Kafka Docker, voici la liste des variables d’environnement requises :
- KAFKA_ZOOKEEPER_CONNECT – indique à Kafka où trouver le gardien de zoo
- KAFKA_ADVERTISED_LISTENERS – spécifiant le nom d’hôte annoncé, auquel les clients peuvent accéder. De plus, cette valeur est envoyée au Zookeeper
Veuillez garder à l’esprit que pour exécuter une seule instance de Kafka (c’est-à -dire un cluster à nÅ“ud unique), nous devons en outre spécifier KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR défini sur 1 . Sa valeur par défaut est 3 et si nous ne le faisons pas, nous obtiendrons cette erreur : org.apache.kafka.common.errors.InvalidReplicationFactorException : Facteur de réplication : 3 plus grand que les courtiers disponibles : 1
6. Vérifiez la configuration de Kafka Docker Compose
Cela étant dit, nous pouvons enfin vérifier si tout fonctionne, comme prévu.
6.1. Démarrer les conteneurs
Dans un premier temps, nous devons démarrer nos conteneurs :
docker compose up -d
L’ indicateur -d demande au docker d’exécuter les conteneurs en mode détaché.
Bien sûr, nous pouvons tout vérifier en exécutant la docker pscommande :
# example output: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 38b41bc43676 confluentinc/cp-kafka:7.2.1 "/etc/confluent/dock…" 42 seconds ago Up 4 seconds 0.0.0.0:8098->8098/tcp, 9092/tcp kafka 45484184f330 confluentinc/cp-zookeeper:7.2.1 "/etc/confluent/dock…" 42 seconds ago Up 5 seconds 2181/tcp, 2888/tcp, 3888/tcp zookeeper
6.2. Créer un sujet Kafka
Créons ensuite un nouveau sujet Kafka :
docker exec kafka kafka-topics --bootstrap-server localhost:8098 --create --topic example
En guise d’explication, kafka-topics est un script shell qui nous permet d’exécuter un outil TopicCommand . Il s’agit d’un outil en ligne de commande capable de gérer et de répertorier les sujets dans un cluster Kafka. De plus, nous devons spécifier le nom d’hôte de l’écouteur (spécifié avec KAFKA_ADVERTISED_LISTENERS) avec –bootstrap-server .
Lorsque le sujet est créé, nous devrions voir le message suivant : « Exemple de sujet créé ».
6.3. Exécuter Kafka Producer
Ensuite, exécutons un producteur de console avec kafka-console-producer :
docker exec --interactive --tty kafka kafka-console-producer --bootstrap-server localhost:8098 --topic example
Veuillez garder à l’esprit que cette commande démarrera le producteur et attendra notre contribution (et vous devriez remarquer le >signe). Veuillez spécifier quelques messages et appuyer sur Ctrl + D après avoir terminé :
>lorem >lui-même # appuyez sur Ctrl + D
6.4. Exécuter Kafka Consumer
Comme dernière étape, exécutons un consommateur de console avec la commande kafka-console-consumer :
docker exec --interactive --tty kafka kafka-console-consumer --bootstrap-server localhost:8098 --topic example --from-beginning
Cette fois, nous devrions voir que nos messages sont imprimés avec succès sur la sortie (et pour terminer, appuyez sur Ctrl+ C ) :
lorem ipsum
7. Kafka avec Docker Compose Résumé
Et ce serait tout pour ce guide étape par étape sur la façon de configurer Apache Kafka avec Docker Compose .
Faites-moi part de vos réflexions dans la section commentaires ou contactez-nous via le formulaire de contact. J’apprécie grandement vos réflexions, commentaires et retours.
Prends soin de toi frère/soeur !
