How To Set Up Apache Kafka With Docker?

Comment configurer Apache Kafka avec Docker ?

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.

L'image montre deux ebooks que les personnes peuvent obtenir gratuitement après s'être inscrites à la newsletter

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 !

Dr Omar omari

Je suis Omar, fondateur de Voyage Voices. Avec des années d'expérience en croisière, je me consacre à vous guider à travers la vaste mer d'informations sur la croisière. Lorsque vous ne naviguez pas ou ne faites pas de recherche, je vous fournis des conseils fiables et à jour pour vous aider à créer l'expérience de croisière parfaite. Laissez-moi être votre boussole de confiance dans le monde des croisières.

Voir tous les articles de Dr Omar omari →

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *