
Kafka Lag : comment suivre les offsets et surveiller les messages en attente.
Dans un environnement Kafka, il est essentiel de surveiller le décalage (lag) des consommateurs pour garantir une consommation efficace des messages produits. Cet article détaille comment récupérer les offsets Kafka et surveiller le nombre de messages en attente à l’aide d’un script Bash exécuté directement dans un conteneur Docker.
🤖 Marius : « Si un consommateur prend trop de temps à lire les messages, il risque de créer un embouteillage ! 🚦 Suivons ça de près ! »

Bonjour !
Je suis Jean-Marc HENRY, ingénieur ESI, consultant IT/IS pour les entreprises depuis plus de 35 ans, et fondateur de LMVI Conseil.
À travers ce blog, je vous propose d’explorer ensemble tous les 15 jours les grands ou petits (!) sujets de l’informatique.
Ici, on parlera de sujets qui me servent quotidiennement et qui me tiennent à cœur, comme le Nocode, l’IA, l’IT, l’IS ou l’architecture logicielle et un peu WSO2.
D’ailleurs, je ne suis pas seul à rédiger ces billets !
Je suis accompagné de mon assistant IA prénommé Marius. C’est un bon pote d’Ollama et de ChatGPT (entre autres, car il a un sacré réseau !).
Il est assez secret et ne me dit pas tout sur la manière dont il m’aide à écrire mes articles. En revanche, je ne publie rien qui n’ait été validé par des sources sûres ou testé !
C’est parti, on vous embarque !
Qu’est-ce qu’Apache Kafka ?
Apache Kafka est une plateforme distribuée de diffusion de données en continu conçue pour gérer des flux massifs de données en temps réel.
Initialement développée par LinkedIn et devenue open-source sous la fondation Apache, Kafka permet de publier, stocker, traiter et consommer des messages de manière fiable et évolutive.
Grâce à son architecture basée sur un log distribué, il est particulièrement utilisé pour la collecte de logs, l’intégration de données, l’analyse en temps réel et la communication entre microservices.
1. Vérification manuelle des offsets.
Objectifs
Ce guide vous permettra de :
✅ Identifier le dernier offset produit : le dernier message écrit dans Kafka.
✅ Déterminer le dernier offset consommé : le dernier message lu par un groupe de consommateurs.
✅ Calculer le lag total : la différence entre les deux, indiquant le nombre de messages en attente de traitement.
🤖 Marius : « En gros, on va traquer les messages comme un détective 🕵️♂️, pour voir s’ils arrivent bien à destination ! »
Prérequis
- Un environnement Kafka opérationnel.
- Un conteneur Docker exécutant Kafka.
- Un topic Kafka actif.
- Un groupe de consommateurs Kafka configuré.
🤖 Marius : « Pas de panique si tu n’as pas tout ça sous la main, on peut toujours faire des tests sur un environnement de développement ! 🛠️ »
1. Vérification manuelle des offsets.
Avant d’automatiser la surveillance, il est utile de vérifier les offsets via des commandes directes.
1.1 Récupérer le dernier offset produit
Cette commande permet d’obtenir la somme des derniers offsets pour toutes les partitions d’un topic Kafka.kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic my_topic --time -1 | awk -F ":" '{sum += $3} END {print sum}'
🤖 Marius : « Avec cette commande, on demande gentiment à Kafka : « Dis-moi où en est le dernier message ! » 📢«
1.2 Récupérer les offsets consommés et le lag
Pour afficher les détails de consommation pour un groupe spécifique, exécutez :
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group my_consumer_group --describe
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG
my_consumer_group my_topic 0 13357 13357 0
- CURRENT-OFFSET : dernier offset lu
- LOG-END-OFFSET : dernier offset produit
- LAG : nombre de messages en attente
🤖 Marius : « Si le lag est trop grand, il va falloir accélérer la consommation des messages ! »
2. Automatisation avec un script Bash
Nous allons maintenant automatiser ces étapes avec un script Bash exécutable dans le conteneur Kafka.
2.1 Création du script
kafka_lag_checker.sh
avec le contenu suivant :#!/bin/bash # Configuration BROKER="localhost:9092" TOPIC="my_topic" GROUP="my_consumer_group" # Récupérer le dernier offset produit LATEST_OFFSETS=$(kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list $BROKER --topic $TOPIC --time -1 | awk -F ":" '{sum += $3} END {print sum}') # Récupérer l'offset consommé CONSUMED_OFFSETS=$(kafka-consumer-groups.sh --bootstrap-server $BROKER --group $GROUP --describe | awk 'NR>1 && $4 ~ /^[0-9]+$/ {sum += $4} END {print sum}') # Calculer le lag total LAG=$((LATEST_OFFSETS - CONSUMED_OFFSETS)) # Afficher les résultats echo "📌 Topic: $TOPIC" echo "🎯 Groupe de consommation: $GROUP" echo "📊 Dernier offset produit par Kafka : $LATEST_OFFSETS" echo "📥 Dernier offset lu par le groupe : $CONSUMED_OFFSETS" echo "⏳ Nombre total de messages en attente (LAG): $LAG"
🤖 Marius : « Tadam ! 🎉 Avec ce script, plus besoin de faire les commandes à la main. Kafka nous donne les infos en un clin d’œil ! 👀«
2.2 Copie du script dans le conteneur Docker
Depuis votre hôte, copiez le script dans le conteneur Kafka :
docker cp kafka_lag_checker.sh kafka-container:/tmp/kafka_lag_checker.sh
Puis, donnez-lui les permissions d’exécution :
docker exec -it kafka-container chmod +x /tmp/kafka_lag_checker.sh
🤖 Marius : « C’est comme si on installait une nouvelle appli sur un téléphone, sauf que là, c’est dans le conteneur Docker ! 📦«
2.3 Exécution du script
Exécutez le script directement dans le conteneur Kafka :
docker exec -it kafka-container /tmp/kafka_lag_checker.sh
Sortie attendue :
📌 Topic: my_topic 🎯 Groupe de consommation: my_consumer_group 📊 Dernier offset produit par Kafka : 13357 📥 Dernier offset lu par le groupe : 13357 ⏳ Nombre total de messages en attente (LAG): 0
🤖 Marius : « Si le lag est à zéro, tout roule ! 🚀 Sinon, il faut peut-être ajouter plus de consommateurs pour accélérer la lecture. »
6. Conclusion
watch
: bash
CopierModifier
watch -n 5 docker exec -it kafka-container /tmp/kafka_lag_checker.sh
Cela vous permettra de suivre le lag en temps réel et d’ajuster la consommation des messages si nécessaire, en ajoutant des consommateurs ou en optimisant leur traitement.
🤖 Marius : « Kafka, c’est un peu comme une autoroute pour les messages ! Avec ce script, on peut s’assurer que la circulation reste fluide 🚗💨«
Cela vous permettra de suivre le lag en temps réel et d’ajuster la consommation des messages si nécessaire, en ajoutant des consommateurs ou en optimisant leur traitement.
Qui sommes-nous ?
LMVI-Conseil, fondé en 2023 par Jean-Marc Henry, Consultant Seniot IT IS, est spécialisé dans l’accompagnement des entreprises vers des solutions technologiques innovantes.
Avec près de trente-cinq ans d’expérience, nous combinons conseil stratégique et expertise technique pour répondre à vos défis numériques.