Pour déployer un système de messagerie robuste avec Kafka, il est crucial de comprendre ses composants fondamentaux et d'utiliser Docker pour une installation simplifiée.
Architecture fondamentale de Kafka
Un cluster Kafka se compose de plusieurs éléments clés :
- Broker : Instances de serveur Kafka, chacune identifiée par un ID unique au sein du cluster.
- Topic : Catégories logiques pour organiser les messages, stockés sur les brokers.
- Partition : Sous-ensembles d'un topic permettant le parallélisme et la répartition de charge.
- Réplication : Chaque partition possède des répliques pour assurer la tolérance aux pannes.
- Zookeeper : Service de coordination pour gérer les métadonnées du cluster Kafka.
- Producteur et Consommateur : Applications qui écrivent ou lisent les messages dans les topics.
Déploiement de Zookeeper avec Docker
Commencez par installer Zookeeper, qui est nécessaire pour le fonctionnement de Kafka.
# Téléchargement de l'image Docker pour Zookeeper
docker pull zookeeper:3.7.1
# Création et démarrage du conteneur Zookeeper
docker run -d --name mon_zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime:ro zookeeper:3.7.1
Le volume monté assure la synchronisation de l'heure avec l'hôte.
Installation de Kafka via Docker
Ensuite, déployez Kafka en configurant les variables d'environnement appropriées.
# Récupération de l'image Kafka officielle
docker pull confluentinc/cp-kafka:7.3.0
# Lancement d'un conteneur Kafka avec des paramètres personnalisés
docker run -d --name kafka_instance -p 9093:9093 \
-e KAFKA_BROKER_ID=1 \
-e KAFKA_ZOOKEEPER_CONNECT=host.docker.internal:2181/kafka \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://host.docker.internal:9093 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9093 \
-e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
confluentinc/cp-kafka:7.3.0
Les paramètres d'environnement définissent l'identifiant du broker, la connexion à Zookeeper et les listeners réseau.
Fichier de configuration complet pour le broker
Voici un exemple de configuration pour le fichier server.properties, situé dans /etc/kafka/.
# Identifiant unique du broker dans le cluster
broker.id=1
# Configuration des threads pour le réseau et les E/S disque
num.network.threads=4
num.io.threads=10
# Taille des buffers réseau
socket.send.buffer.bytes=131072
socket.receive.buffer.bytes=131072
socket.request.max.bytes=104857600
# Répertoire de stockage des journaux de messages
log.dirs=/var/lib/kafka/data
# Nombre de partitions par défaut pour les nouveaux topics
num.partitions=2
# Stratégie de rétention des données basée sur le temps
log.retention.hours=168
# Taille maximale d'un segment de journal
log.segment.bytes=1073741824
# Intervalle de vérification pour la suppression des données
log.retention.check.interval.ms=300000
# Connexion au cluster Zookeeper
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka
zookeeper.connection.timeout.ms=6000
Cette configuration couvre les aspects critiques tels que le stockage, la rétention et la connectivité Zookeeper.