Concepts de base
Kafka est un système de messaging distribué.
Conçu pour haute scalabilité, débit élevé et tolérance aux pannes.
Modèle publish-subscribe : producteurs publient, consommateurs s’abonnent.
Topics et partitions
Topic : catégorie de messages (équivalent d’une table).
Partition : division d’un topic pour permettre le parallélisme.
graph TB T[Topic: orders] --> P0[Partition 0] T --> P1[Partition 1] T --> P2[Partition 2] P0 --> M1[Msg 1] P0 --> M2[Msg 4] P1 --> M3[Msg 2] P1 --> M4[Msg 5] P2 --> M5[Msg 3] P2 --> M6[Msg 6]
Chaque partition est ordonnée et immutable.
Les messages sont append-only.
Réplication
Chaque partition est répliquée sur plusieurs brokers.
Un broker est le leader, les autres sont followers.
Écritures et lectures via le leader.
Followers répliquent de manière asynchrone.
graph LR P[Producer] --> L[Leader] L --> F1[Follower 1] L --> F2[Follower 2] C[Consumer] --> L
En cas de panne du leader, un follower devient leader.
Offset
Chaque message dans une partition a un offset unique.
L’offset est un identifiant séquentiel incrémental.
Les consommateurs trackent leur position via l’offset.
Partition 0:
Offset: 0 1 2 3 4 5
Msg: [A] [B] [C] [D] [E] [F]
^
Consumer à offset 2
Log compaction
Deux modes de rétention :
Time-based : garder messages pendant N jours.
Log compaction : garder seulement le dernier message par clé.
Avant compaction:
Key: A B A C B A
Val: 1 2 3 4 5 6
Après compaction:
Key: A C B
Val: 6 4 5
Utile pour changelog : seul l’état actuel compte.