Dépannage — Kafka
ZooKeeper perd le quorum
Cause : le nombre de réplicas ZooKeeper est insuffisant ou pair, empêchant la formation d'un quorum majoritaire. Un quorum nécessite une majorité stricte (ex. 2/3 nœuds).
Solution :
- Vérifiez le nombre de réplicas ZooKeeper configuré :
kubectl get kafka -o yaml | grep -A 5 zookeeper - Assurez-vous que
zookeeper.replicasest un nombre impair (3, 5 ou 7) - Vérifiez l'état des pods ZooKeeper :
kubectl get pods -l app.kubernetes.io/component=zookeeper - Contrôlez l'espace disque disponible sur les volumes ZooKeeper — un disque plein provoque la perte du quorum :
kubectl exec <pod-zookeeper> -- df -h /data - Si nécessaire, augmentez
zookeeper.sizedans votre manifeste et réappliquez-le
Topic inaccessible ou broker indisponible
Cause : un ou plusieurs brokers Kafka ne fonctionnent pas correctement, ou le topic n'a pas suffisamment de réplicas synchronisées par rapport à min.insync.replicas.
Solution :
- Vérifiez l'état des pods Kafka :
kubectl get pods -l app.kubernetes.io/component=kafka - Inspectez les événements d'un pod en erreur :
kubectl describe pod <pod-kafka> - Vérifiez que le nombre de réplicas du topic est cohérent avec le nombre de brokers disponibles :
kubectl exec <pod-kafka> -- kafka-topics.sh --describe --topic <nom-topic> --bootstrap-server localhost:9092 - Contrôlez l'espace de stockage — un volume plein empêche le broker de fonctionner :
kubectl exec <pod-kafka> -- df -h /bitnami/kafka
Consumer lag important
Cause : les consumers ne traitent pas les messages assez rapidement par rapport au débit de production. Cela peut être dû à un nombre insuffisant de partitions, trop peu de consumers dans le groupe, ou des consumers sous-dimensionnés.
Solution :
- Identifiez le lag du consumer group :
kubectl exec <pod-kafka> -- kafka-consumer-groups.sh --describe --group <group-id> --bootstrap-server localhost:9092 - Si le lag est réparti sur de nombreuses partitions, augmentez le nombre de consumers dans le group (sans dépasser le nombre de partitions)
- Si toutes les partitions ont du lag, envisagez d'augmenter le nombre de partitions du topic :
kafka.yaml
topics:
- name: events
partitions: 12
replicas: 3 - Vérifiez que les consumers ont des ressources suffisantes (CPU, mémoire) pour traiter les messages
Broker en OOMKilled
Cause : le broker Kafka consomme plus de mémoire que la limite allouée. Cela se produit fréquemment avec le preset nano ou micro sous charge.
Solution :
- Vérifiez les événements du pod pour confirmer l'OOMKill :
kubectl describe pod <pod-kafka> | grep -A 5 "Last State" - Augmentez les ressources mémoire du broker en utilisant un preset supérieur ou des ressources explicites :
kafka.yaml
kafka:
replicas: 3
resources:
cpu: 2000m
memory: 4Gi
size: 20Gi - Réappliquez le manifeste :
kubectl apply -f kafka.yaml
Messages dupliqués
Cause : par défaut, Kafka fonctionne en mode at-least-once delivery. En cas de retry du producteur ou de rebalancing des consumers, des messages peuvent être délivrés plusieurs fois.
Solution :
- Côté producteur : activez l'idempotence pour éviter les doublons lors des retries :
enable.idempotence=true
acks=all - Côté consumer : implémentez un mécanisme de déduplication basé sur un identifiant unique du message (clé, UUID, etc.)
- Pour les cas critiques, combinez
acks=all,enable.idempotence=truesur le producteur et un traitement idempotent côté consumer
L'idempotence du producteur garantit qu'un message envoyé plusieurs fois (à cause de retries réseau) n'est écrit qu'une seule fois dans la partition. Le traitement idempotent côté consumer reste nécessaire pour couvrir les scénarios de rebalancing.