Installer et configurer Kafka
Pourquoi Kafka ?
Apache Kafka est un système de messagerie distribué conçu pour gérer des flux de données en temps réel. Il est massivement utilisé dans les architectures modernes orientées évènements, notamment dans les domaines du traitement de données, de la cybersécurité, du monitoring, de la finance, ou encore de l’IoT.
Kafka permet de produire, stocker et consommer des données sous forme de flux d’événements. Contrairement à une base de données ou une file d’attente classique, Kafka est hautement scalable, tolérant aux pannes, et peut servir des milliers de consommateurs simultanés sans perte de performance.
Architecture de Kafka
Kafka est composé de plusieurs éléments clés :
- Broker : un serveur Kafka qui reçoit, stocke et distribue les messages. Un cluster Kafka peut comporter plusieurs brokers.
- Topic : un canal de communication nommé, dans lequel les messages sont organisés. Chaque topic est subdivisé en partitions.
- Partition : sous-division d’un topic. Les messages sont répartis sur les partitions de manière équilibrée ou selon une clé de partition.
- Producer : une application qui envoie des messages à un topic Kafka.
- Consumer : une application qui lit les messages d’un ou plusieurs topics.
- Zookeeper : service de coordination distribué nécessaire au bon fonctionnement de Kafka (au moins jusqu’à Kafka 2.8, après quoi son usage devient optionnel).
+------------------+ +------------------+
| Producer | | Producer |
+--------+---------+ +---------+--------+
| |
v v
+---------------------------------------+
| Kafka Cluster |
| +-----------+ +-----------+ |
| | Broker 1 | | Broker 2 | ... |
| +-----------+ +-----------+ |
+-----------------+---------------------+
|
v
+-------------+
| Consumer |
+-------------+
Pré-requis
Avant d’installer Kafka, assurez-vous que votre machine répond aux conditions suivantes :
- Java (JDK 8 ou supérieur) est installé.
- Vous êtes sur un système Linux, macOS ou WSL sous Windows (Kafka ne fonctionne pas nativement sur Windows).
- Vous avez une connexion internet pour télécharger les fichiers nécessaires.
Installation de Java
Kafka nécessite une JVM (Java Virtual Machine). Vous pouvez installer Java avec la commande suivante :
sudo apt update
sudo apt install openjdk-17-jdk -y
Vérifiez que Java est correctement installé avec :
java -version
Téléchargement et extraction de Kafka
Rendez-vous sur le site officiel de Kafka pour télécharger la dernière version :
kafka.apache.org/downloads.
Ou utilisez les lignes suivantes :
wget https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
tar -xvzf kafka_2.13-3.7.0.tgz
cd kafka_2.13-3.7.0
Lancement de Zookeeper
Kafka nécessite Zookeeper pour gérer le cluster, la coordination entre les brokers et l’état des consommateurs. Kafka est livré avec un script pour lancer un Zookeeper en local :
bin/zookeeper-server-start.sh config/zookeeper.properties
Vous pouvez également le lancer en arrière-plan :
bin/zookeeper-server-start.sh config/zookeeper.properties > zookeeper.log 2>&1 &
Lancement du broker Kafka
Une fois Zookeeper en marche, vous pouvez démarrer Kafka :
bin/kafka-server-start.sh config/server.properties
Création d’un topic
Kafka utilise des topics pour organiser les messages. Voici comment créer un topic nommé data-events
:
bin/kafka-topics.sh --create \
--topic data-events \
--bootstrap-server localhost:9092 \
--partitions 3 \
--replication-factor 1
Kafka vous renverra un message de confirmation si la création a réussi. Pour voir les topics existants :
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
Exploration des fichiers de configuration
Le fichier de configuration principal de Kafka est config/server.properties
. Voici quelques lignes importantes :
broker.id=0
log.dirs=/tmp/kafka-logs
zookeeper.connect=localhost:2181
listeners=PLAINTEXT://localhost:9092
log.retention.hours=168
broker.id
: identifiant unique du broker dans un cluster.log.dirs
: chemin où les données Kafka sont stockées.listeners
: l’adresse à laquelle Kafka écoute.zookeeper.connect
: URL du serveur Zookeeper.log.retention.hours
: durée pendant laquelle Kafka conserve les messages.
Utilisation de Docker (optionnel)
Si vous préférez utiliser Docker pour éviter d’installer Kafka manuellement :
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.6.0
environment:
ZOOKEEPER_CLIENT_PORT: 2181
kafka:
image: confluentinc/cp-kafka:7.6.0
ports:
- "9092:9092"
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
Puis lancez avec :
docker-compose up -d
Conseils pour le développement
- Utilisez
kcat
(anciennementkafkacat
) pour tester les topics rapidement. - Kafka ne supprime pas les messages dès qu’ils sont lus. Ils restent disponibles jusqu’à expiration.
- Un topic peut avoir plusieurs consommateurs répartis dans différents groupes pour scalabilité.
- Utilisez des partitions pour répartir la charge et permettre la parallélisation.
Conclusion
Kafka est un composant fondamental pour le traitement distribué de données. Vous venez d’installer un broker Kafka, configuré Zookeeper, et appris à créer un topic.
Dans le prochain tutoriel, nous verrons comment consommer ces messages via Python en utilisant la librairie kafka-python
, et plus tard, comment en produire depuis une application.