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.