Introduction
Apache Kafka est un système de messagerie distribué à haute performence, réplicable et extensible. Il est conçu pour gérer d'importants flux de données en temps réel, garantissant la cohérence et la persistance des messages. Kafka trouve des applications dans le traitement de données volumétriques, la transmission d'événements en temps réel et l'architecture de systèmes distribués. Ce guide détaille la procédure de déploiement d'un cluster Kafka.
Présentation de Kafka
Kafka est une plateforme de streaming distribuée qui fonctionne comme un système de messagerique. Sa caractéristique principale réside dans sa capacité à traiter efficacement d'énormes volumes de données en temps réel, en se basant sur une coordination assurée par Apache ZooKeeper.
Cas d'utilisation typiques
Traitement de données en temps réel
Dans les environnements web, Kafka est employé pour ingérer et traiter instantanément les actions des utilisateurs (navigation, clics, recherches). Ces données alimentent ensuite des systèmes d'analyse ou de recommandation en temps réel.
Agrégation et analyse de logs
Les serveurs d'entreprise génèrent d'importants fichiers journaux. Kafka sert de ppieline centralisé pour collecter ces logs depuis diverses sources, avant de les distribuer à des outils d'analyse dédiés comme Elasticsearch, facilitant ainsi le diagnostic de pannes et la surveillance des performances.
Architectures pilotées par les événements
Dans des domaines tels que l'IoT ou la finance, Kafka agit comme bus d'événements. Lorsqu'un événement significatif se produit, il est publié danns un topic Kafka, puis consommé par les applications concernées pour déclencher des actions correspondantes (alertes, mises à jour de données).
Procédure d'installation du cluster
1. Vérification de l'environnement système
# Vérification du système d'exploitation
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
# Vérification de la version de Java
$ java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
2. Planification de l'infrastructure
| No. | Adresse IP | Nom d'hôte | Services à déployer |
|---|---|---|---|
| 1 | 192.168.40.129 | nœud-principal | Kafka, ZooKeeper, JDK |
| 2 | 192.168.40.130 | nœud-secondaire-1 | Kafka, ZooKeeper, JDK |
| 3 | 192.168.40.131 | nœud-secondaire-2 | Kafka, ZooKeeper, JDK |
3. Choix des versions des composants
| Composant | Version |
|---|---|
| JDK | 1.8.0_161 |
| ZooKeeper | Intégré à la distribution Kafka |
| Kafka | kafka_2.11-0.10.2.1 |
4. Installation préalable de JDK
Veuillez vous référer à la procédure standard d'installation de Java 8 sur votre distribution Linux.
5. Déploiement de Kafka
Téléchargez l'archive d'installation de Kafka et transférez-la sur tous les nœuds du cluster.
5.1 Configuration sur le nœud principal
Décompressez l'archive et créez un lien symbolique pour faciliter la gestion des versions.
# Création d'un lien symbolique vers l'installation
$ ln -sfn /data/soft/kafka_2.11-0.10.2.1 ./kafka-active
# Édition du fichier server.properties
$ vim /data/soft/kafka-active/config/server.properties
# Contenu modifié:
broker.id=0
log.dirs=/var/data/kafka-journaux
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://192.168.40.129:9092
zookeeper.connect=192.168.40.129:2181,192.168.40.130:2181,192.168.40.131:2181
# Configuration de ZooKeeper
$ vim /data/soft/kafka-active/config/zookeeper.properties
dataDir=/var/data/zookeeper-donnees
# Création des répertoires de données
$ mkdir -p /var/data/zookeeper-donnees /var/data/kafka-journaux
# Distribution des fichiers vers les autres nœuds
$ scp -r /data/soft/kafka_2.11-0.10.2.1 root@nœud-secondaire-1:/data/soft/
$ scp -r /data/soft/kafka_2.11-0.10.2.1 root@nœud-secondaire-2:/data/soft/
5.2 Configuration sur le premier nœud secondaire
# Création du lien symbolique
$ ln -sfn /data/soft/kafka_2.11-0.10.2.1 ./kafka-active
# Modification de la configuration Kafka
$ vim /data/soft/kafka-active/config/server.properties
# Paramètres spécifiques:
broker.id=1
advertised.listeners=PLAINTEXT://192.168.40.130:9092
# Création des répertoires nécessaires
$ mkdir -p /var/data/zookeeper-donnees /var/data/kafka-journaux
5.3 Configuration sur le second nœud secondaire
# Création du lien symbolique
$ ln -sfn /data/soft/kafka_2.11-0.10.2.1 ./kafka-active
# Modification de la configuration Kafka
$ vim /data/soft/kafka-active/config/server.properties
# Paramètres spécifiques:
broker.id=2
advertised.listeners=PLAINTEXT://192.168.40.131:9092
# Création des répertoires nécessaires
$ mkdir -p /var/data/zookeeper-donnees /var/data/kafka-journaux
5.4 Configuration des variables d'environnement
À exécuter sur chaque nœud du cluster :
$ cat >> /etc/profile <<eof eof="" export="" kafka_root="/data/soft/kafka-active" path="\$PATH:\$KAFKA_ROOT/bin" source=""></eof>
5.5 Démarrage du cluster
Ordre de démarrage : Lancer ZooKeeper avant Kafka.
Ordre d'arrêt : Arrêter Kafka avant ZooKeeper.
# Démarrage des instances ZooKeeper (sur chaque nœud)
$ zookeeper-server-start.sh -daemon /data/soft/kafka-active/config/zookeeper.properties
# Démarrage des brokers Kafka (sur chaque nœud)
$ kafka-server-start.sh -daemon /data/soft/kafka-active/config/server.properties
# Vérification des ports en écoute
$ netstat -tlnp | grep -E '9092|2181'
# Création d'un topic de test
$ kafka-topics.sh --zookeeper 192.168.40.129:2181 --create \
--topic test_stream --partitions 2 --replication-factor 2
# Inspection des détails du topic
$ kafka-topics.sh --describe --zookeeper 192.168.40.129:2181 --topic test_stream
5.6 Script de gestion du cluster
#!/bin/bash
# Fichier: cluster_manager.sh
NODES=("nœud-principal" "nœud-secondaire-1" "nœud-secondaire-2")
KAFKA_HOME="/data/soft/kafka-active"
start_cluster() {
for node in "${NODES[@]}"; do
echo "Démarrage de ZooKeeper sur $node"
ssh "$node" "$KAFKA_HOME/bin/zookeeper-server-start.sh -daemon $KAFKA_HOME/config/zookeeper.properties"
sleep 2
done
sleep 10
for node in "${NODES[@]}"; do
echo "Démarrage de Kafka sur $node"
ssh "$node" "$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties"
sleep 2
done
}
stop_cluster() {
for node in "${NODES[@]}"; do
echo "Arrêt de Kafka sur $node"
ssh "$node" "$KAFKA_HOME/bin/kafka-server-stop.sh"
sleep 5
done
sleep 10
for node in "${NODES[@]}"; do
echo "Arrêt de ZooKeeper sur $node"
ssh "$node" "$KAFKA_HOME/bin/zookeeper-server-stop.sh"
sleep 2
done
}
case "$1" in
start) start_cluster ;;
stop) stop_cluster ;;
restart) stop_cluster; start_cluster ;;
*) echo "Usage: $0 {start|stop|restart}" ;;
esac
Après avoir rendu le script exécutable (chmod +x cluster_manager.sh), vous pouvez lancer :
$ ./cluster_manager.sh start
$ netstat -tlnp | grep -E '9092|2181'