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 kafka
et zookeeper
. Le container_name
dé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 ps
commande :
# 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 !