Déploiement opérationnel de Kafka : Configuration mono-noeud et cluster haute disponibilité

Prérequis système et initialisation de l'environnement

L'architecture suivante s'applique indifféremment pour une mise en œuvre isolée ou au sein d'un parc distribué. Préparez un dossier racine dédié aux binaires, par exemple /opt/middleware, et assurez-vous que les droits d'accès sont configurés correctement.

Mise en place du JDK

Téléchargez la distribution Java depuis le dépôt officiel Oracle. Une fois l'archive transférée sur le serveur cible, extrayez-la :

mkdir -p /opt/middleware
tar -xzf jdk-8u421-linux-x64.tar.gz -C /opt/middleware

Créez un lien symbolique simlpifiant l'accès :

ln -sf /opt/middleware/jdk1.8.0_421 /opt/middleware/jdk-standard

Dans le fichier global d'environnement, définissez les variables nécessaires :

vim /etc/profile
# Ajouter à la fin du fichier :
export JAVA_HOME=/opt/middleware/jdk-standard
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile

Pour éviter les conflits avec une version système préinstallée via YUM ou RPM, procédez au nettoyage si nécessaire :

yum list installed | grep openjdk
yum remove -y java-1.8.0-openjdk
rm -f /usr/bin/java
ln -s /opt/middleware/jdk-standard/bin/java /usr/bin/java

Installation de ZooKeeper

ZooKeeper agit comme coordonnateur central. Sélectionnez une version stable (ex: 3.5.7) et extrayez-là dans le répertoire de base :

tar -xzf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/middleware
ln -sf /opt/middleware/apache-zookeeper-3.5.7-bin /opt/middleware/zk-core

Configurez l'environnement spécifique :

export ZOOKEEPER_HOME=/opt/middleware/zk-core
export PATH=$PATH:$ZOOKEEPER_HOME/bin

Copiez le modèle de configuration et définissez le stockage local :

cd /opt/middleware/zk-core/conf
cp zoo_sample.cfg zoo.cfg
mkdir -p /var/lib/zookeeper
sed -i 's/dataDir=.*/dataDir\/var\/lib\/zookeeper/' /opt/middleware/zk-core/conf/zoo.cfg

Lancement et vérification du service :

$ZOOKEEPER_HOME/bin/zkServer.sh start
jps | grep QuorumPeerMain
$ZOOKEEPER_HOME/bin/zkServer.sh status

Un statut Mode: standalone confirme que le processus est prêt.

Configuration en environnement Mono-noeud

Bien que rare en production, cette configuration sert de base de test. Assurez-vous que la résolution DNS fonctionne localement :

hostnamectl set-hostname broker-local
echo "127.0.0.1 broker-local" >> /etc/hosts

Extrayez l'archive Kafka compatible Scala :

tar -xzf kafka_2.12-3.8.0.tgz -C /opt/middleware
ln -sf /opt/middleware/kafka_2.12-3.8.0 /opt/middleware/kafka-app

Dans le fichier config/server.properties, adaptez les paramètres critiques :

broker.id=100
listeners=PLAINTEXT://broker-local:9092
advertised.listeners=PLAINTEXT://broker-local:9092
log.dirs=/var/log/kafka-logs
zookeeper.connect=localhost:2181
num.partitions=1
default.replication.factor=1

Démarrage en arrière-plan :

nohup $KAFKA_HOME/bin/kafka-server-start.sh config/server.properties &
jps | grep Kafka

Déploiement d'un Cluster Distribué

Passer à une architecture multi-nœuds nécessite une synchronisation horaire stricte et une coordination accrue. Prenons l'exemple de trois serveurs nommés nœud-A, nœud-B et nœud-C.

Installez NTP sur chaque machine :

yum install ntp -y
systemctl enable ntpd
ntpdate pool.ntp.org

Chaque nœud doit connaître l'adresse IP des autres via le fichier hosts :

192.168.10.10 nœud-A
192.168.10.11 nœud-B
192.168.10.12 nœud-C

Coordination ZooKeeper Cluster

Modifiez zoo.cfg sur chaque instance pour définir l'ensemble des membres :

# Sur nœud-A
server.1=nœud-A:2888:3888
server.2=nœud-B:2888:3888
server.3=nœud-C:2888:3888

Créez le fichier myid correspondant à l'identifiant serveur défini ci-dessus dans le répertoire de données :

echo "1" > /var/lib/zookeeper/myid # Sur nœud-A
echo "2" > /var/lib/zookeeper/myid # Sur nœud-B
echo "3" > /var/lib/zookeeper/myid # Sur nœud-C

Orchestration Kafka Cluster

Les fichiers server.properties doivent être uniques par broker, notamment pour l'ID et l'écouteur public. Utilisez scp pour dupliquer la configuration puis ajustez :

# Copie de référence
scp config/server.properties nœud-B:/opt/middleware/kafka-app/config/
scp config/server.properties nœud-C:/opt/middleware/kafka-app/config/

# Personnalisation sur nœud-B
# broker.id=200
# listeners=PLAINTEXT://nœud-B:9092
# advertised.listeners=PLAINTEXT://nœud-B:9092

# Connection ZooKeeper mise à jour
zookeeper.connect=nœud-A:2181,nœud-B:2181,nœud-C:2181

Gestion des Topiques et Outils CLI

La suite binaire de Kafka inclut des utilitaires puissants pour l'administration.

  • kafka-topics.sh : Gestion du cycle de vie des sujets.
  • kafka-console-producer.sh : Injection de messages.
  • kafka-console-consumer.sh : Lecture du flux de données.
  • kafka-consumer-groups.sh : Inspection de la latence et offset.

Exemple de création d'un sujet répliqué :

kafka-topics.sh --create \
  --bootstrap-server nœud-A:9092,nœud-B:9092,nœud-C:9092 \
  --replication-factor 3 \
  --partitions 4 \
  --topic transactions-financieres

Vérification des détails :

kafka-topics.sh --describe \
  --bootstrap-server nœud-A:9092,nœud-B:9092,nœud-C:9092 \
  --topic transactions-financieres

Lecture consommée avec identification de groupe :

kafka-console-consumer.sh \
  --bootstrap-server nœud-A:9092,nœud-B:9092,nœud-C:9092 \
  --topic transactions-financieres \
  --group groupe-traitement-01 \
  --from-beginning \
  --property print.key=true

Intégration de l'outil de supervision Kafka-Eagle

Ce dashboard permet de visualiser les métriques temps réel. Extrayez l'application web après téléchargement :

cd /opt/software
tar -xzf kafka-eagle-bin-3.0.1.tar.gz
cd kafka-eagle-bin-3.0.1
tar -xzf efak-web-3.0.1-bin.tar.gz -C /opt/middleware/
ln -sf /opt/middleware/efak-web-3.0.1-bin /opt/middleware/ke-platform

Définissez l'environnement et configurez la connexion à la base de données MySQL :

export KE_HOME=/opt/middleware/ke-platform
vim $KE_HOME/conf/system-config.properties

Ajustez les paramètres suivants :

kafka.eagle.zk.cluster.alias=prod-cluster
cluster1.zk.list=nœud-A:2181,nœud-B:2181,nœud-C:2181
kafka.eagle.driver=com.mysql.cj.jdbc.Driver
kafka.eagle.url=jdbc:mysql://localhost:3306/ke_metrics
kafka.eagle.username=admin_ke
kafka.eagle.password=P@ssw0rd!Secure

Pour activer JMX, injectez le port de surveillance dans le script de démarrage Kafka :

export JMX_PORT="9999"
export KAFKA_HEAP_OPTS="-Xms2G -Xmx2G"

Redémarrez les brokers et lancez le service de monitoring :

cd $KE_HOME/bin
chmod +x ke.sh
./ke.sh start

L'interface Web est accessible sur le port par défaut. L'authentification initiale utilise les identifiants par défaut admin / 123456. Vous pouvez alors observer les graphiques de consommation et l'état des partitions.

Étiquettes: Kafka ZooKeeper middleware Linux-Administration Monitoring

Publié le 4 octobre à 15h46