v1.9 fügt 12 neue Szenarien hinzu - zehn weitere im Modul dr und zwei in einem neuen Modul tiered-storage - und bringt das Curriculum des Kafka Simulators auf 112 von 134. Außerdem veröffentlicht v1.9 etwas, worauf sich der Simulator von Anfang an stützt: das Format seiner Links.

Was in v1.9 steckt

Mehr Disaster Recovery (dr, 10 Szenarien). Zwei Plattform-Antworten auf die Probleme, die v1.8 mit MirrorMaker 2 aufgezeigt hat:

Tiered Storage (tiered-storage, 2 Szenarien). Alte Segmente, ausgelagert in Object Storage: der vollständige Lebenszyklus aus Auslagern, Zurücklesen und Ablauf, wobei localStartOffset und logStartOffset auseinanderlaufen - und unendliche Retention, bei der gealterte Segmente die lokale Platte verlassen, ein zurückliegender Consumer aber trotzdem jedes einzelne von ihnen zurückliest.

Der Playground hält seinen gesamten Zustand in der URL. Ein Link kann ein geskriptetes Szenario bei einem bestimmten Schritt öffnen, eine Folge von Cluster-Operationen erneut abspielen oder einen eigenen Free-Play-Cluster aufbauen - so funktioniert jeder „Share”-Button im Simulator.

Ab v1.9 ist dieses Format öffentlich und dokumentiert (auf Englisch): die Query-Parameter, die Grammatik des Action-Logs, die Kodierung der Cluster-Form und was der Playground mit einem Eintrag macht, den er nicht parsen kann. Jedes Beispiel in der Spezifikation wird von der Testsuite des Simulators selbst dekodiert, sodass das Dokument nicht vom Code abweichen kann.

Ein dokumentiertes Format bedeutet, dass Links auch von anderswo als aus dem Playground kommen können - aus einem Skript, einem CI-Job oder von einem KI-Agenten. Der erste Generator wird mit diesem Release ausgeliefert.

Den Cluster, um den es Ihnen tatsächlich geht, von Hand zu beschreiben - Broker für Broker, Topic für Topic - ist mühsam und fehleranfällig. monedula-sim-link ist eine kleine Go-CLI, die sich nur lesend mit einem echten Kafka-Cluster verbindet und den Playground-Link ausgibt, der ihn visualisiert:

$ 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=…

Der Link öffnet den laufenden Cluster als Simulator: Broker, Topics, Partitionsplatzierung, Replikationsfaktor, offline Broker, ISR-Lücken, Consumer Groups mit ihren Mitgliedern, Topic-Konfigurationen und eine Stichprobe des Datenvolumens - ein Bild, das Sie pausieren, Schritt für Schritt durchgehen und kaputt machen können, ohne die Produktion anzufassen, und das Sie mitten in einem Incident einem Teamkollegen schicken können, statt eines Absatzes, der es beschreibt.

Nur lesend und in einer einzigen Datei prüfbar. Ein Tool auf einen Produktionscluster zu richten ist eine Vertrauensentscheidung, deshalb ist die Garantie eng gefasst und explizit. connect sendet ausschließlich Lese-Requests - ApiVersions, Metadata, ListOffsets und für Gruppen und Konfigurationen ListGroups, DescribeGroups, OffsetFetch und DescribeConfigs. Der Metadata-Request setzt AllowAutoTopicCreation=false, sodass selbst das Nachschlagen eines Topics nie eines anlegen kann. Es werden keine Records produziert und keine Konfigurationen geändert, es wird keiner Gruppe beigetreten und kein Offset committet. Die gesamte Client-Oberfläche liegt in einer Datei, snapshot/kafka.go, mit Tests, die belegen, dass ein fehlgeschlagenes Nachschlagen das Topic nicht automatisch anlegt und dass das Lesen der Offsets einer Gruppe diese nie verändert.

Passt dazu, wie Cluster abgesichert sind. TLS, mutual TLS und SASL/SCRAM werden unterstützt, wobei das Passwort aus MONEDULA_SIM_LINK_PASSWORD gelesen wird, damit es nicht in der Shell-History landet:

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

Topics werden per exaktem Namen, per Regex oder mit beidem ausgewählt, und --dry-run gibt die Zuordnungen von echten Namen zu Simulator-Namen und die abgeleitete Clustergröße aus, bevor Ihnen die URL übergeben wird. Alles, was der Link kodiert, ist eine kompakte Beschreibung der Form und eine Stichprobe des Volumens; der Simulator hat kein Backend, also verlassen Ihre Daten nie Ihren Rechner.

Ein MCP-Server für KI-Agenten

monedula-sim-link mcp spricht das Model Context Protocol über stdio, sodass Claude Code, Claude Desktop oder jeder andere MCP-Client auf Anfrage Links erstellen kann. Bitten Sie um „Zeig mir einen Cluster mit 6 Brokern, in dem der Leader für orders ausfällt” oder „Visualisiere unseren Staging-Cluster”, und der Agent gibt einen Link zurück, der genau das öffnet. Der Server stellt vier Tools bereit:

  • build_playground_url - eine Free-Play-Session aus einer deklarativen Beschreibung: eine Topologie, eine Cluster-Form (Broker; Topics mit Partitionen, RF, min.insync.replicas, Cleanup-Policy; Rack Awareness) und eine geordnete Liste zeitgesteuerter Aktionen - Records produzieren, Broker killen und neu starten, Producer und Consumer Groups hinzufügen, Konfigurationsänderungen, Reassignment, Tiered-Storage-Offload, Drosselung.
  • open_scenario - der Link zu einem der kuratierten geskripteten Szenarien, über seine gepunktete ID (z. B. 00.1.3).
  • validate_actions - was der Playground aus einem rohen actions-String oder einer vollständigen URL tatsächlich laden würde: die übrig bleibenden Aktionen, jeder verworfene Eintrag mit seinem Grund sowie Länge und Anzahl gemessen an den Obergrenzen des Codecs.
  • cluster_to_url - der connect-Snapshot als Tool, mit derselben Nur-Lese-Garantie.

Die URL-Konstruktion einem LLM zu überlassen ist genau die Stelle, an der Dinge still und leise schiefgehen - ein verstümmeltes Trennzeichen, ein Konfigurationspfad, den der Simulator nicht akzeptiert, ein actions-Wert jenseits der Längengrenze - und der Playground verwirft stillschweigend, was er nicht parsen kann. Deshalb läuft jedes Tool durch denselben Fail-Fast-Codec wie die CLI, und es wird keine URL zurückgegeben, es sei denn, ihr actions-Wert dekodiert wieder zu exakt demselben Log. Schlägt die Validierung fehl, nennt der Fehler das betroffene Feld, Trennzeichen oder den betroffenen Konfigurationspfad, sodass der Agent seine Eingabe korrigieren kann, statt einen abgeschnittenen Link auszuliefern.

Die Registrierung braucht in Claude Code eine Zeile:

claude mcp add monedula-sim-link -- monedula-sim-link mcp

Für Claude Desktop tragen Sie den Server in claude_desktop_config.json ein:

{
  "mcpServers": {
    "monedula-sim-link": {
      "command": "monedula-sim-link",
      "args": ["mcp", "--base-url", "https://monedula.dev/kafka-simulator/playground"]
    }
  }
}

--base-url ist optional; richten Sie den Parameter auf http://localhost:4321/kafka-simulator/playground, um Links für einen lokalen Dev-Server zu erzeugen. Der Server basiert auf dem offiziellen modelcontextprotocol/go-sdk.

monedula-sim-link liegt in einem eigenen Open-Source-Repository, monedula-dev/monedula-sim-link auf GitHub - ein eigenständiges Go-Modul unter der Apache-2.0-Lizenz, installierbar per go install oder als vorgebautes Binary für Linux, macOS und Windows von der Releases-Seite. Das Tool sendet keine Telemetrie und ist der Referenzgenerator für das URL-Format: Ein Link, den es erzeugt, dekodiert im Playground zu genau dem Log, das es geschrieben hat.

Einen Cluster so skalieren, wie Kafka es tut

Free Play ändert die Anzahl der Broker jetzt so, wie es ein echter Cluster tut. Bis v1.9 hat das Hinzufügen eines Brokers stillschweigend Partitionen auf ihn umverteilt - was, wie ein Leser angemerkt hat, nicht das ist, was Kafka tut. Ein Broker, den Sie hinzufügen, kommt jetzt leer dazu: Keine Partition wandert von selbst auf ihn, und der Cluster-Inspector weist darauf hin, mit einem Button Rebalance partitions daneben. Im Terminal schlägt kafka-reassign-partitions --generate aus einer Topic-Liste und einer Broker-Liste einen Plan vor, --execute startet ihn und --verify bestätigt ihn. Die andere Richtung folgt derselben Regel: Ein Broker, der noch Partitionen hält, muss geleert werden, bevor er entfernt werden kann, in derselben Reihenfolge, in der Sie einen echten Broker stilllegen würden.

Öffnen Sie den Simulator, führen Sie mit Cluster Linking ein Failover einer Region durch und teilen Sie den Link.