Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

⚡ Apache Kafka – Architecture, Opérations & Bonnes Pratiques

Clusters KRaft, Producers/Consumers, Streams, Connect, Registry, sécurité, monitoring & troubleshooting.

1.1

Vue d’ensemble

Concepts, flux, comparatif RabbitMQ.

TopicPartitionOffset
1.2

Architecture

Brokers, Controller, ISR, KRaft.

ReplicationISRKRaft
1.3

Installation

Linux, Docker, KRaft single/cluster.

apt/yumdockerkraft
2.1

Producteurs

Idempotence, acks, débit, exemples.

acks=alllinger.ms
2.2

Consommateurs

Groupes, commit, rebalance.

group.idcooperative-sticky
2.3

Sémantiques & Ordre

At‑least/most, EoS, keys.

EoSordering
3.1

Kafka Streams

DSL, Processor API, windows.

DSLRocksDB
3.2

Kafka Connect

Sources/Sinks, SMT, REST.

Connect
3.3

Schéma & Sérialisation

Avro/JSON/Protobuf, Registry.

Schema
4.1

Sécurité

TLS, SASL, ACL, quotas.

TLSSASL
4.2

Monitoring

JMX/Prometheus, lags.

JMXPrometheus
4.3

Performance & Tuning

Disque, réseau, brokers.

I/Obatch
5.1

Troubleshooting

URP, rebalances, segments.

URPLag
5.2

Cas d’usage

EDA, ETL, log, IoT.

EDAETL
6.1

Références

Docs officielles & liens.

doc
6.2

Cheat‑sheet

CLI, configs, recettes.

kafka‑*
1.1 Vue d’ensemble – Qu’est‑ce que Kafka ?
  • Topic : bus logique d’événements. Partition : journal ordonné append‑only.
  • Producer écrit en batches (compression, linger, batch.size).
  • Consumer Group lit en parallèle ; un seul consumer par partition.
  • ISR : in‑sync replicas. URP : under‑replicated partitions.
  • Retention par durée/taille ; compactage conserve la dernière valeur par clé.
  • Exactly‑Once (EoS) via idempotence + transactions.
Objets clés
ObjetRôleCLI
TopicFlux partitionnékafka-topics.sh
ACLSécurité ressourcekafka-acls.sh
GroupConso parallèlekafka-consumer-groups.sh
ConnectorIngestion/egestionREST Connect
[Producer] --batch--> [Broker/Leader] --replicate--> [Followers]
[Segments .log] <= retention/compactage
[Consumer Group] --fetch--> [Partition 0..n] --commit--> __consumer_offsets

Le débit provient du séquencement disque + envoi séquentiel réseau, et du batching.

CritèreKafkaRabbitMQQuand l’utiliser ?
ModèleLog/OffsetQueue/AckKafka pour analytics/ETL, RabbitMQ pour RPC/Work Queues
RoutageKey → partitionExchange (direct/topic/…)RabbitMQ pour routes riches
RetoursPas de DLQ natif (pattern)DLX/DLQ intégrésRabbitMQ pour retries structurés
ReplayOffsets repositionnablesNon (sauf requeue)Kafka pour relecture massive
Règles de pouce (rough sizing)
  • Partitions : ~ (10 × nb. consommateurs parallèles visés).
  • Stockage : débit_journalier × rétention_jours × réplication (×1.2 marge).
  • RF : 3 pour prod. min.insync.replicas = 2 + acks=all.
1.2 Architecture – Brokers, ISR, KRaft
ComposantRôlePoints d’attention
BrokerStockage partitions, API réseaupage cache, I/O séquentiel
ControllerMétadonnées clusterstabilité quorum
LogSegments .log/.indexretention.ms / bytes, cleanup.policy
Group CoordinatorRebalance, commitstimeouts, cooperative‑sticky
min.insync.replicas=2
acks=all   # requiert ≥2 ISR pour l’ack
unclean.leader.election.enable=false
        

Surveiller UnderReplicatedPartitions; déclencher un reassignment si nécessaire.

process.roles=broker,controller
controller.listener.names=CONTROLLER
controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093
        
  • Pas de ZooKeeper : bootstrapping via cluster.id.
  • 3 voters min. Production : 3 ou 5 selon SLA.
kafka-reassign-partitions.sh --generate --topics-to-move-json-file topics.json --broker-list "1,2,3" --bootstrap-server :9092
kafka-reassign-partitions.sh --execute --reassignment-json-file map.json --bootstrap-server :9092
        

Utiliser --verify et surveiller le throttle pour limiter l’impact.

+ Controller Quorum (KRaft)
| voters: node1,node2,node3
+-----v----+   replicate   +-----------+
| Broker 1 |<------------->| Broker 2  |
+----------+               +-----------+
        
1.3 Installation – Linux, Docker & Cluster KRaft
# User, Java, déballage
sudo useradd -m -s /bin/bash kafka && sudo su - kafka
curl -O https://downloads.apache.org/kafka/3.7.0/kafka_2.13-3.7.0.tgz
mkdir -p ~/kafka && tar xzf kafka_2.13-3.7.0.tgz -C ~/kafka --strip-components=1
# Unit systemd (extrait)
[Service]
ExecStart=/opt/kafka/bin/kafka-server-start.sh /etc/kafka/server.properties
        
docker‑compose.yml
version: '3.8'
services:
  kafka:
    image: bitnami/kafka:3.7
    environment:
      - KAFKA_ENABLE_KRAFT=yes
      - KAFKA_CFG_PROCESS_ROLES=broker,controller
      - KAFKA_CFG_NODE_ID=1
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093
      - ALLOW_PLAINTEXT_LISTENER=yes
    ports: ["9092:9092","9093:9093"]
    volumes: ["kdata:/bitnami/kafka"]
volumes: { kdata: {} }
        
# KRaft cluster (3 voters)
CLUSTER_ID=$(bin/kafka-storage.sh random-uuid)
# init + format + start (node1..node3)
        
  • Configurer advertised.listeners pour clients distants.
  • RAID1/10 conseillé, XFS/ext4.
  • kcat (ancien kafkacat) : production/consommation rapide.
  • jmx_exporter + Prometheus + Grafana.
  • Cruise Control : rebalancing automatisé.
2.1 Producteurs – Acks, Idempotence, Débit
PropriétéEffetValeur typeNotes
acksDurabilitéallavec min.insync.replicas≥2
enable.idempotenceDé‑doublonnagetrueactive retry+acks automatiques
linger.msBatching5–50+ batch.size 64–256 KB
compression.typeDébit/réseaulz4/zstdgagne 2‑5×
Properties p=new Properties();
p.put("bootstrap.servers","broker:9092");
p.put("acks","all");
p.put("enable.idempotence",true);
p.put("linger.ms",10);
Producer prod=new KafkaProducer<>(p,new StringSerializer(), new ByteArraySerializer());
prod.send(new ProducerRecord<>("orders","k1", payload));
        
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers=['broker:9092'],
                         acks='all', linger_ms=10, value_serializer=lambda v: v)
producer.send('orders', key=b'k1', value=b'{...}')
producer.flush()
        
# Conseils débit
- Favoriser des messages 1–10 KB, mais batcher jusqu'à 128–512 KB.
- Multi‑threads producteurs (1 conn / plusieurs threads ok).
- Eviter l'ACK local (acks=1) en prod; préférer acks=all.
        
2.2 Consommateurs – Groupes, Commit & Rebalance
enable.auto.commit=false
# traiter -> commitSync() (ou commitAsync avec callbacks)
max.poll.interval.ms=300000   # éviter les rebalances pendant des traitements longs
session.timeout.ms=45000
        
partition.assignment.strategy=cooperative-sticky
# réduit les pauses; nécessite clients récents
        
kafka-consumer-groups.sh --bootstrap-server :9092 --describe --group g1
# Exporter le lag vers Prometheus (burrow, kafka-lag-exporter)
2.3 Sémantiques – At‑least/At‑most/EoS & Ordonnancement
TypeGarantiesMise en œuvre
At‑most‑once0/Ncommit avant traitement
At‑least‑once≥1traiter puis commit
Exactly‑Once1Idempotence + transactions
partitioner: key -> hash(key) % partitions
# pour l’ordre par clé, réutiliser la même clé (ex: userId)
enable.idempotence=true
transactional.id=service-A
# côté consumer: read-process-produce-commit transactionnel
3.1 Kafka Streams – DSL, State, Windows, Joins
builder.stream("orders").mapValues(enrich).to("orders.enriched")

State local (RocksDB) + changelog Kafka. Sauvegarde compacte, rééquilibrage en cas de rebalance.

orders.join(payments, joiner, JoinWindows.ofSeconds(30))
3.2 Kafka Connect – Intégrations
  • Workers, Tasks, Connectors, Converters, Transforms.
bootstrap.servers=broker:9092
config.storage.topic=connect-configs
status.storage.topic=connect-status
offset.storage.topic=connect-offsets
        
errors.tolerance=all
errors.deadletterqueue.topic.name=_connect_dlq
transforms=unwrap
transforms.unwrap.type=io.debezium.transforms.ExtractNewRecordState
        
3.3 Schéma & Sérialisation – Avro/JSON/Protobuf
  • Confluent Schema Registry ou Apicurio.
  • Sujets topic-value/topic-key.
FormatAvantagesNotes
AvroCompact + évolutifTrès courant
JSON‑SchemaLisibleValidation stricte
ProtobufPerf/gRPCTypes riches
compatibility.level=BACKWARD
# Process d’évolution: add fields with default, éviter les breaks
4.1 Sécurité – TLS, SASL & ACL
listeners=SSL://:9093
ssl.keystore.location=/etc/kafka/keystore.jks
ssl.truststore.location=/etc/kafka/truststore.jks
sasl.enabled.mechanisms=SCRAM-SHA-512
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
listener.name.sasl_ssl.scram-sha-512.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required ...;
kafka-acls.sh --bootstrap-server :9092 --add --allow-principal User:alice --operation READ --topic orders
        
4.2 Monitoring – JMX/Prometheus, Lags & Santé
Métriques essentielles
MétriqueSignificationSeuils/Alertes
UnderReplicatedPartitionsPartitions hors ISR>0 = alerte
OfflinePartitionsCountIndisponiblesdoit = 0
RequestHandlerAvgIdlePercentIdle broker<0.2 = saturation
NetworkProcessorAvgIdlePercentIdle réseau<0.2 = saturation
Lag par groupRetard consoseuils métier
Dashboards
Exporter JMX -> Prometheus (jmx_exporter)
Dashboards: Kafka/Broker, Kafka/Connect, Kafka/Streams, Lag (Burrow)
4.3 Performance & Tuning – Disque, Réseau, Config
log.retention.hours=168
log.segment.bytes=1GB
num.recovery.threads.per.data.dir=8
        

Disques SSD NVMe recommandés, pas de RAID5.

socket.send.buffer.bytes=1048576
socket.receive.buffer.bytes=1048576
num.network.threads=8
        
num.io.threads=16
queued.max.requests=1000
replica.fetch.max.bytes=1048576
        
5.1 Troubleshooting – URP, Rebalance, Segments
kafka-topics.sh --describe --topic orders --bootstrap-server :9092
# Vérifier leader/ISR; réparer via reassign/throttle
# Symptômes: pauses longues, throughput en dents de scie
- Activer cooperative-sticky
- Réduire max.poll.interval.ms si trop grand
- Augmenter partitions (scaling horizontal)
        
du -sh /kafka-logs/*
# Purges manuelles contrôlées, vérifier retention/segment
5.2 Cas d’usage & Applications
Event‑Driven & Micro‑services
  • Event sourcing, CQRS, audit trail.
  • Anti‑corruption layer vers systèmes legacy.
Data/ETL temps réel
  • CDC (Debezium) → Kafka → DWH/Lake (Iceberg/Delta).
  • Enrichissement via Streams/ksqlDB.
IoT & Logs
  • Ingestion télémétrie massive, partitions par device/site.
  • Centralisation logs (Filebeat → Kafka → OpenSearch).
Finances & Paiement
  • Transactions, détection de fraude en streaming.
6.1 Références officielles & liens utiles
  • Apache Kafka : Docs, KIPs, Quickstarts.
  • Kafka Streams : guide, Topology Test Driver.
  • Kafka Connect : REST API, SMT catalogue, Debezium.
  • Schema Registry : stratégies de compatibilité.
  • Observabilité : jmx_exporter, Burrow, Grafana dashboards.
  • Outils : kcat, kafka-tools, Cruise Control.
6.2 Cheat‑sheet – Commandes & Recettes
CLI essentiels
kafka-topics.sh --create --topic orders --partitions 12 --replication-factor 3 --bootstrap-server :9092
kafka-configs.sh --alter --entity-type topics --entity-name orders --add-config cleanup.policy=compact
kafka-consumer-groups.sh --describe --group g1 --bootstrap-server :9092
kafka-reassign-partitions.sh --generate ...
          
Recettes rapides
# Topic compacté pour vues matérielles
cleanup.policy=compact
min.cleanable.dirty.ratio=0.2
# Topic retention 7j
retention.ms=604800000
# Producteur haut débit
acks=all, linger.ms=20, compression.type=zstd