---
title: "Kafka Simulator v1.9 - la couche plateforme et un format d'URL public"
date: 2026-10-09T00:00:00.000Z
author: "michal"
excerpt: "Les observateurs Multi-Region Cluster, Cluster Linking et le stockage hiérarchisé complètent le volet DR et stockage en douze scénarios - et le format d'URL du playground devient public, avec monedula-sim-link pour transformer un cluster en fonctionnement, ou la description d'un agent IA, en lien."
---
La v1.9 ajoute **12 nouveaux scénarios** - dix de plus dans le module dr et deux dans un nouveau module tiered-storage - et porte le cursus du [Kafka Simulator](/kafka-simulator/) à **112 sur 134**. Elle publie aussi une chose sur laquelle le simulateur s'appuie depuis le début : le format de ses liens.

## Ce que contient la v1.9

**Davantage de reprise après sinistre (`dr`, 10 scénarios).** Deux réponses côté plateforme aux problèmes que la v1.8 a posés avec MirrorMaker 2 :

- **[Les observateurs Multi-Region Cluster](/kafka-simulator/scenarios/mrc-observers/)** - des réplicas qui suivent le log sans rejoindre l'ISR, de sorte qu'une copie distante ne coûte rien sur le chemin d'écriture. [L'ampleur de leur retard](/kafka-simulator/scenarios/observer-lag/), [où les placer](/kafka-simulator/scenarios/durability-vs-latency/) et [comment ils sont promus](/kafka-simulator/scenarios/observer-promotion/) - y compris [le cas où la promotion a besoin d'un leader qu'elle ne peut plus joindre](/kafka-simulator/scenarios/observer-promotion-reachable-leader/).
- **[Cluster Linking](/kafka-simulator/scenarios/cluster-linking-offset-preserving/)** - un miroir octet pour octet qui préserve les offsets, si bien qu'un consommateur qui bascule n'a besoin d'aucune traduction. [Les topics miroirs restent en lecture seule jusqu'à leur promotion](/kafka-simulator/scenarios/mirror-read-only-promote-writable/), [les offsets validés des consommateurs sont synchronisés tels quels à travers le lien](/kafka-simulator/scenarios/consumer-offset-sync-link/), [le lien s'inverse sur place pour un failback propre](/kafka-simulator/scenarios/bidirectional-links-failback/), et [un scénario le fait tourner côte à côte avec MirrorMaker 2](/kafka-simulator/scenarios/cluster-linking-vs-mm2/) sur la même topologie. Le free play gagne la commande correspondante : un éditeur de régions et de liens miroirs sur les topologies à deux régions, où chaque lien est MirrorMaker 2 ou Cluster Linking et peut être inversé.

**Stockage hiérarchisé (`tiered-storage`, 2 scénarios).** Les anciens segments déchargés vers le stockage objet : [le cycle de vie complet du déchargement, de la relecture et de l'expiration](/kafka-simulator/scenarios/confluent-tiered-lifecycle/), avec `localStartOffset` et `logStartOffset` qui s'écartent - et [la rétention infinie](/kafka-simulator/scenarios/infinite-retention-tiered/), où les segments vieillis quittent le disque local mais où un consommateur en retard les relit encore tous.

## Chaque session est un lien

Le playground conserve tout son état dans l'URL. Un lien peut ouvrir un scénario scripté à une étape donnée, rejouer une séquence d'opérations sur le cluster ou monter un cluster free-play personnalisé - c'est ainsi que fonctionne chaque bouton « partager » du simulateur.

À partir de la v1.9, ce format est [public et documenté](/flock/docs/kafka-simulator/reference/url-format/) (en anglais) : les paramètres de requête, la grammaire du journal d'actions, l'encodage de la forme du cluster, et ce que fait le playground d'une entrée qu'il ne parvient pas à analyser. Chaque exemple de la spécification est décodé par la suite de tests du simulateur lui-même, si bien que le document ne peut pas diverger du code.

Un format documenté signifie que les liens peuvent venir d'ailleurs que du playground - un script, un job de CI ou un agent IA. Le premier générateur est livré avec cette version.

## monedula-sim-link : un vrai cluster sous forme de lien

Décrire à la main le cluster qui vous intéresse vraiment - broker par broker, topic par topic - est fastidieux et source d'erreurs. [monedula-sim-link](/fr/flock/sim-link/) est une petite CLI en Go qui se connecte **en lecture seule** à un vrai cluster Kafka et affiche le lien du playground qui le visualise :

```bash
$ go install github.com/monedula-dev/monedula-sim-link/cmd/monedula-sim-link@latest
$ monedula-sim-link connect --brokers localhost:9092 --topics orders,payments
https://monedula.dev/kafka-simulator/playground?scenario=free&actions=…&size=…
```

Le lien ouvre le cluster en fonctionnement sous forme de simulation : brokers, topics, placement des partitions, facteur de réplication, brokers hors ligne, écarts d'ISR, groupes de consommateurs avec leurs membres, configurations de topic et un échantillon du volume de données - une image que vous pouvez mettre en pause, parcourir pas à pas, casser sans toucher à la production, et envoyer à un collègue en plein incident au lieu d'un paragraphe pour le décrire.

**En lecture seule, et auditable dans un seul fichier.** Pointer un outil vers un cluster de production est une affaire de confiance, la garantie est donc étroite et explicite. `connect` n'émet que des requêtes de lecture - ApiVersions, Metadata, ListOffsets et, pour les groupes et les configurations, ListGroups, DescribeGroups, OffsetFetch et DescribeConfigs. La requête Metadata positionne `AllowAutoTopicCreation=false`, si bien que même la recherche d'un topic ne peut jamais en créer un. Aucun enregistrement n'est produit, aucune configuration n'est modifiée, aucun groupe n'est rejoint, aucun offset n'est validé. Toute la surface du client tient dans un seul fichier, [`snapshot/kafka.go`](https://github.com/monedula-dev/monedula-sim-link/blob/main/snapshot/kafka.go), avec des tests qui prouvent qu'une recherche échouée ne crée pas automatiquement le topic et que lire les offsets d'un groupe ne les modifie jamais.

**S'adapte à la façon dont les clusters sont sécurisés.** TLS, TLS mutuel et SASL/SCRAM sont pris en charge, le mot de passe étant lu depuis `MONEDULA_SIM_LINK_PASSWORD` pour qu'il reste hors de l'historique du shell :

```bash
export MONEDULA_SIM_LINK_PASSWORD='…'
monedula-sim-link connect --brokers broker1:9093,broker2:9093 \
  --tls --ca-cert ./cluster-ca.pem \
  --sasl-mechanism scram-sha-512 --username viewer
```

Les topics sont sélectionnés par nom exact, par regex, ou les deux, et `--dry-run` affiche les correspondances entre noms réels et noms du simulateur ainsi que la taille de cluster dérivée avant de vous remettre l'URL. Tout ce que le lien encode est une description compacte de la forme et un échantillon du volume ; le simulateur n'a pas de backend, donc vos données ne quittent jamais votre machine.

## Un serveur MCP pour les agents IA

`monedula-sim-link mcp` parle le **Model Context Protocol** sur stdio, afin que Claude Code, Claude Desktop ou tout autre client MCP puisse construire des liens à la demande. Demandez « montre-moi un cluster de 6 brokers où le leader de `orders` meurt » ou « visualise notre cluster de staging », et l'agent renvoie un lien qui ouvre exactement cela. Le serveur expose quatre outils :

- **`build_playground_url`** - une session free-play à partir d'une description déclarative : une topologie, une forme de cluster (brokers ; topics avec partitions, RF, `min.insync.replicas`, politique de nettoyage ; rack awareness) et une liste ordonnée d'actions programmées - produire des enregistrements, tuer et redémarrer des brokers, ajouter des producteurs et des groupes de consommateurs, changements de configuration, réaffectation, déchargement vers le stockage hiérarchisé, bridage.
- **`open_scenario`** - le lien vers l'un des scénarios scriptés sélectionnés, par son identifiant à points (par ex. `00.1.3`).
- **`validate_actions`** - ce que le playground chargerait *réellement* à partir d'une chaîne `actions` brute ou d'une URL complète : les actions conservées, chaque entrée rejetée avec sa raison, et la longueur et le nombre rapportés aux plafonds du codec.
- **`cluster_to_url`** - l'instantané de `connect` sous forme d'outil, avec la même garantie de lecture seule.

Confier la construction d'URL à un LLM, c'est exactement là que les choses tournent mal sans bruit - un séparateur abîmé, un chemin de configuration que le simulateur n'accepte pas, une valeur `actions` au-delà du plafond de longueur - et le playground abandonne silencieusement ce qu'il ne parvient pas à analyser. C'est pourquoi chaque outil passe par le même codec fail-fast que la CLI, et aucune URL n'est renvoyée à moins que sa valeur `actions`, une fois décodée, ne redonne exactement le même journal d'actions. Quand la validation échoue, l'erreur nomme le champ, le séparateur ou le chemin de configuration fautif, afin que l'agent puisse corriger son entrée au lieu de livrer un lien tronqué.

Pour enregistrer le serveur dans Claude Code, une ligne suffit :

```bash
claude mcp add monedula-sim-link -- monedula-sim-link mcp
```

Pour Claude Desktop, ajoutez-le à `claude_desktop_config.json` :

```json
{
  "mcpServers": {
    "monedula-sim-link": {
      "command": "monedula-sim-link",
      "args": ["mcp", "--base-url", "https://monedula.dev/kafka-simulator/playground"]
    }
  }
}
```

`--base-url` est facultatif ; faites-le pointer vers `http://localhost:4321/kafka-simulator/playground` pour générer des liens vers un serveur de développement local. Le serveur repose sur le [`modelcontextprotocol/go-sdk`](https://github.com/modelcontextprotocol/go-sdk) officiel.

monedula-sim-link vit dans son propre dépôt open source, [monedula-dev/monedula-sim-link](https://github.com/monedula-dev/monedula-sim-link) sur GitHub - un module Go autonome sous licence Apache-2.0, qui s'installe avec `go install` ou sous forme de binaire précompilé pour Linux, macOS et Windows depuis la [page des releases](https://github.com/monedula-dev/monedula-sim-link/releases). L'outil n'envoie aucune télémétrie, et c'est le générateur de référence du format d'URL : un lien qu'il produit, une fois décodé dans le playground, redonne exactement le journal d'actions qu'il a écrit.

## Redimensionner un cluster comme le fait Kafka

Le free play modifie désormais le nombre de brokers comme le fait un vrai cluster. Jusqu'à la v1.9, ajouter un broker rééquilibrait discrètement des partitions sur ce broker - ce qui, comme un lecteur l'a [fait remarquer](https://github.com/monedula-dev/monedula-kafka-simulator-issues/issues/1), n'est pas ce que fait Kafka. Un broker que vous ajoutez arrive désormais vide : aucune partition ne s'y déplace d'elle-même, et l'inspecteur du cluster l'indique, avec un bouton **Rebalance partitions** à côté. Dans le terminal, `kafka-reassign-partitions --generate` propose un plan à partir d'une liste de topics et d'une liste de brokers, `--execute` le lance et `--verify` le confirme. L'autre sens suit la même règle : un broker qui détient encore des partitions doit être drainé avant de pouvoir être retiré, dans le même ordre que pour décommissionner un vrai broker.

Ouvrez le [simulateur](/kafka-simulator/), faites basculer une région avec Cluster Linking et partagez le lien.