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 *