Idées

Kafka n’est pas un JMS

Kafka est un journal distribué avec ses propres concepts: partitions, offsets, groupes de consommateurs, rétention. Y transposer les réflexes d’une file de messages mène à l’erreur: les concepts passent d’abord

Parmi les recommandations que j’ai rédigées cette année pour une plateforme Kafka, une seule tient sur une ligne.

Kafka n’est pas un JMS! C’est une technologie à part, avec ses propres concepts

Le piège, c’est qu’il en a l’air. On y retrouve des producteurs, des consommateurs, des topics, des messages. Une équipe qui a passé des années sur une file de messages reconnaît le vocabulaire et arrive avec ses habitudes. C’est là que ça casse.

Dans une file, un message consommé disparaît: le broker sait qui a reçu quoi et supprime ce qui a été lu. Dans Kafka, un topic est un journal. Le message y reste aussi longtemps que la rétention du topic le prévoit, qu’on l’ait lu ou non, et chaque groupe de consommateurs garde sa propre position dans ce journal: l’offset. Lire ne retire rien. Un groupe peut revenir en arrière et relire, un nouveau groupe peut arriver plus tard et repartir du début.

Les questions changent donc de nature. Deux services doivent recevoir le même message? Ce n’est pas du routage: chacun a son groupe. La troisième instance ne fait rien? C’est une affaire de partitions: dans un groupe, chaque partition va à un seul consommateur, il n’y a donc jamais plus de consommateurs actifs que de partitions. L’ordre est-il garanti? Seulement au sein d’une partition, ce qui fait de la clé de partitionnement une décision de conception. Quand le message est-il supprimé? Quand la rétention le dit, et c’est un choix par topic, pas un effet de la lecture.

Rien de tout cela n’est difficile. C’est différent, et le coût vient de le traiter comme si c’était pareil: des topics dimensionnés comme des files, un nombre de partitions fixé sans compter les consommateurs, une rétention laissée à sa valeur par défaut, un ordre supposé là où rien ne le promettait.

L’ordre que je recommande va contre l’instinct. Apprendre les quatre concepts avant d’écrire le premier consommateur: partitions, offsets, groupes de consommateurs et rétention.

Ensuite seulement, trier les vieilles habitudes. Il en reste moins qu’on ne le croit