Checklist Production Kafka : 87 Points de Vérification
Cette checklist est le résultat de 5 ans d'expérience et 47 clusters mis en production.
Avant chaque mise en production d'un cluster Kafka, je passe par cette checklist. Elle m'a évité des dizaines d'incidents. Cochez chaque point.
1. Infrastructure (18 points)
Serveurs & Hardware
- CPU : Minimum 8 cores par broker (16 recommandé pour > 100k msg/s)
- RAM : Minimum 32GB (64GB recommandé), max 50% pour heap JVM
- Disque : SSD NVMe obligatoire, RAID-10 ou volumes répliqués
- IOPS : Minimum 10,000 IOPS par broker
- Réseau : 10 Gbps minimum entre brokers
- Latence réseau : < 1ms entre brokers du même cluster
Système d'exploitation
- OS : Linux kernel 4.15+ (5.x recommandé)
- File descriptors :
ulimit -n 100000minimum - vm.swappiness : Configuré à 1 (pas 0 !)
- vm.dirty_ratio : 80
- vm.dirty_background_ratio : 5
- net.core.wmem_max : 2097152
- net.core.rmem_max : 2097152
- Filesystem : XFS avec
noatime - Disk scheduler :
noneounooppour SSD
Réseau
- DNS : Résolution correcte des hostnames des brokers
- Ports ouverts : 9092 (clients), 9093 (inter-broker), 2181 (ZK si applicable)
- Firewall : Règles configurées entre tous les brokers
2. Configuration Kafka (22 points)
server.properties - Essentiels
- broker.id : Unique pour chaque broker
- listeners : Configuré pour toutes les interfaces nécessaires
- advertised.listeners : Accessible depuis les clients
- log.dirs : Plusieurs répertoires sur disques distincts
- num.partitions : Défaut raisonnable (6-12)
- default.replication.factor : Minimum 3 en production
- min.insync.replicas : 2 (avec RF=3)
Rétention & Stockage
- log.retention.hours : Défini selon les besoins (168 = 7 jours)
- log.retention.bytes : Limite par partition si nécessaire
- log.segment.bytes : 1GB par défaut, ajuster si besoin
- log.cleanup.policy :
deleteoucompactselon usage
Performance
- num.io.threads : 8 minimum, augmenter selon I/O
- num.network.threads : 8 minimum
- num.replica.fetchers : 4 minimum
- socket.send.buffer.bytes : 102400
- socket.receive.buffer.bytes : 102400
- replica.fetch.max.bytes : Aligné avec message.max.bytes
- message.max.bytes : Selon taille messages attendue
Réplication & Durabilité
- unclean.leader.election.enable :
falseen production - auto.leader.rebalance.enable :
true - leader.imbalance.check.interval.seconds : 300
ZooKeeper / KRaft
- zookeeper.connect : String de connexion correct (ou KRaft configuré)
- zookeeper.session.timeout.ms : 18000 (pas trop bas)
3. Sécurité (15 points)
Authentification
- SASL activé : SCRAM-SHA-512 ou mTLS
- Pas de PLAINTEXT en production
- Credentials : Stockés dans un vault (HashiCorp, K8s secrets)
- Rotation des credentials : Processus documenté
Chiffrement
- SSL inter-broker : Activé (
security.inter.broker.protocol=SSL) - SSL clients : Tous les clients en SSL/TLS
- Certificats : Signés par CA, pas auto-signés
- Expiration certificats : Monitoring + alertes 30j avant
Autorisation
- ACLs activées :
authorizer.class.nameconfiguré - ACLs par défaut : Deny all, allow explicit
- Super users : Liste minimale et documentée
- ACL par topic : Producteurs et consommateurs séparés
Audit
- Logging des accès : Activé pour audit trail
- Log4j sécurisé : Pas de vulnérabilité Log4Shell
- Retention logs audit : Selon politique compliance
4. Monitoring (16 points)
Métriques JMX
- JMX exposé : Port dédié par broker
- JMX Exporter : Prometheus JMX Exporter configuré
- Métriques clés collectées :
-
kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec -
kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec -
kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec -
kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions -
kafka.controller:type=KafkaController,name=OfflinePartitionsCount -
kafka.network:type=RequestMetrics,name=RequestsPerSec
-
Alerting
- Under-replicated partitions : Alerte si > 0
- Offline partitions : Alerte CRITIQUE immédiate
- Consumer lag : Seuil par consumer group
- Disk usage : Alerte à 70%, critique à 85%
- CPU/Memory : Seuils définis
- ISR shrink/expand : Monitoring des changements
Dashboards
- Dashboard Grafana : Vue cluster complète
- Dashboard par topic : Throughput, latence
- Dashboard consumers : Lag, partitions assignées
5. Clients (10 points)
Producers
- acks=all : Pour durabilité maximale
- enable.idempotence=true : Éviter les doublons
- retries : Configuré avec backoff
- linger.ms : Optimisé pour throughput (5-100ms)
- batch.size : Ajusté selon taille messages
Consumers
- auto.offset.reset : Explicitement défini
- enable.auto.commit :
falserecommandé, commit manuel - max.poll.records : Ajusté selon capacité traitement
- session.timeout.ms : Pas trop agressif (45s défaut OK)
- partition.assignment.strategy : CooperativeSticky recommandé
6. Opérations (6 points)
Backup & Recovery
- Backup des configs : server.properties, ACLs
- Procédure de recovery : Documentée et testée
- MirrorMaker 2 : Pour DR cross-datacenter si requis
Maintenance
- Rolling restart : Procédure documentée
- Upgrade path : Version cible et procédure
- Runbook incidents : Procédures documentées
Validation Finale
# Script de validation automatisée
#!/bin/bash
BOOTSTRAP=kafka-1:9092
echo "=== VALIDATION PRE-PROD ==="
# Test connectivité
kafka-broker-api-versions.sh --bootstrap-server $BOOTSTRAP || exit 1
# Vérifier réplication
URP=$(kafka-topics.sh --bootstrap-server $BOOTSTRAP --describe --under-replicated-partitions | wc -l)
[ "$URP" -eq 0 ] || { echo "FAIL: Under-replicated partitions"; exit 1; }
# Vérifier partitions offline
OFFLINE=$(kafka-topics.sh --bootstrap-server $BOOTSTRAP --describe --unavailable-partitions | wc -l)
[ "$OFFLINE" -eq 0 ] || { echo "FAIL: Offline partitions"; exit 1; }
# Test producer
echo "test-message" | kafka-console-producer.sh --bootstrap-server $BOOTSTRAP --topic __test_validation 2>/dev/null
# Test consumer
timeout 5 kafka-console-consumer.sh --bootstrap-server $BOOTSTRAP --topic __test_validation --from-beginning --max-messages 1 2>/dev/null || { echo "FAIL: Consumer test"; exit 1; }
# Cleanup
kafka-topics.sh --bootstrap-server $BOOTSTRAP --delete --topic __test_validation 2>/dev/null
echo "=== VALIDATION OK ==="
Points de Décision Go/No-Go
| Catégorie | Points OK | Total | Status |
|---|---|---|---|
| Infrastructure | ___ | 18 | ⬜ |
| Configuration | ___ | 22 | ⬜ |
| Sécurité | ___ | 15 | ⬜ |
| Monitoring | ___ | 16 | ⬜ |
| Clients | ___ | 10 | ⬜ |
| Opérations | ___ | 6 | ⬜ |
| TOTAL | ___ | 87 | ⬜ |
Critères Go/No-Go :
- Tous les points "Sécurité" cochés : Obligatoire
- Minimum 80% des points totaux : Recommandé
- Tous les points critiques (🔴) cochés : Obligatoire
Cette checklist est mise à jour régulièrement. Version actuelle : 2.1 (Janvier 2025)