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 à 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 - 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, où les placer et comment ils sont promus - y compris le cas où la promotion a besoin d’un leader qu’elle ne peut plus joindre.
- Cluster Linking - 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, les offsets validés des consommateurs sont synchronisés tels quels à travers le lien, le lien s’inverse sur place pour un failback propre, et un scénario le fait tourner côte à côte avec MirrorMaker 2 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, avec localStartOffset et logStartOffset qui s’écartent - et la rétention infinie, 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é (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 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 :
$ 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, 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 :
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îneactionsbrute 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é deconnectsous 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 :
claude mcp add monedula-sim-link -- monedula-sim-link mcp
Pour Claude Desktop, ajoutez-le à claude_desktop_config.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 officiel.
monedula-sim-link vit dans son propre dépôt open source, 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. 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, 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, faites basculer une région avec Cluster Linking et partagez le lien.