kafka
Avancé

Checklist Production Kafka : 87 Points de Vérification

Checklist Production Kafka : 87 Points de Vérification

La checklist que j'utilise avant chaque mise en production Kafka. Sécurité, performance, monitoring, backup - rien n'est oublié.

Florian Courouge
20 min de lecture
1,341 mots
0 vues
#Kafka
#Production
#Checklist
#Best Practices
#DevOps

Checklist Production Kafka : 87 Points de Vérification

Contenu Exclusif Membres

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 100000 minimum
  • 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 : none ou noop pour 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 : delete ou compact selon 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 : false en 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.name configuré
  • 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 : false recommandé, 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)

F

Florian Courouge

Expert DevOps & Kafka | Consultant freelance specialise dans les architectures distribuees et le streaming de donnees.

Articles similaires