Apache Kafka est la référence pour le streaming de données en temps réel. Depuis la version 3.0, Kafka propose le mode KRaft (Kafka Raft) qui permet de se passer de ZooKeeper, simplifiant l'architecture. Ce guide détaille la mise en place d'un cluster Kafka en mode KRaft, sa scalabilité et la supervision des métriques avec Prometheus et Grafana.
Prérequis
- 3 nœuds minimum pour les brokers Kafka
- Java 11+ installé sur chaque nœud
- Docker & Docker Compose (optionnel pour démo)
- Réseau fiable (1 GbE minimum)
Architecture cible
- Cluster KRaft : brokers configurés pour le mode KRaft, contrôleurs intégrés
- Prometheus pour la collecte des métriques
- Grafana pour le dashboarding
Installation de Kafka en mode KRaft
Téléchargement et décompression
wget https://downloads.apache.org/kafka/3.4.0/kafka_2.13-3.4.0.tgz
tar xzf kafka_2.13-3.4.0.tgz
cd kafka_2.13-3.4.0
Initialiser le quorum des contrôleurs
Sur le premier nœud (controller):
bin/kafka-storage.sh random-uuid > cluster-id.txt
bin/kafka-storage.sh format -t $(cat cluster-id.txt) -c config/kraft/server.properties
Copiez cluster-id.txt
sur tous les nœuds.
Configuration server.properties
Modifiez /path/to/kafka/config/kraft/server.properties
:
process.roles=broker,controller
node.id=1
controller.quorum.voters=1@192.168.1.10:9093,2@192.168.1.11:9093,3@192.168.1.12:9093
listeners=PLAINTEXT://192.168.1.10:9092,CONTROLLER://192.168.1.10:9093
inter.broker.listener.name=PLAINTEXT
controller.listener.names=CONTROLLER
log.dirs=/var/lib/kafka/data
Adaptez node.id
et les adresses pour chaque nœud.
Démarrage des brokers
bin/kafka-server-start.sh config/kraft/server.properties
Création de topics et test
bin/kafka-topics.sh --create --topic test --bootstrap-server 192.168.1.10:9092 --partitions 3 --replication-factor 2
bin/kafka-console-producer.sh --topic test --bootstrap-server 192.168.1.10:9092
bin/kafka-console-consumer.sh --topic test --bootstrap-server 192.168.1.10:9092 --from-beginning
Monitoring avec Prometheus et JMX Exporter
Télécharger JMX Exporter
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.16.1/jmx_prometheus_javaagent-0.16.1.jar
Configurer l’agent dans server.properties
Ajoutez :
KAFKA_JMX_OPTS="-javaagent:/path/to/jmx_prometheus_javaagent-0.16.1.jar=9404:/path/to/kafka-2_0_0.yml"
export KAFKA_JMX_OPTS
Créez kafka-2_0_0.yml
avec les rules Prometheus officielles.
Déployer Prometheus
Fichier prometheus.yml
:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'kafka'
static_configs:
- targets: ['192.168.1.10:9404','192.168.1.11:9404','192.168.1.12:9404']
Lancez Prometheus :
docker run -d -p 9090:9090 -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
Dashboard Grafana
- Ajoutez la source de données Prometheus (
http://localhost:9090
) - Importez un dashboard Kafka (ex : ID 721 sur Grafana.com)
Conclusion
En mode KRaft, Kafka gagne en simplicité et en robustesse. Ce cluster Kafka hautement disponible, supervisé par Prometheus et Grafana, répond aux besoins de streaming pour les applications critiques et Big Data.