---
title: "Kafka Simulator v1.9 - die Plattformschicht und ein öffentliches URL-Format"
date: 2026-10-09T00:00:00.000Z
author: "michal"
excerpt: "Multi-Region-Cluster-Observer, Cluster Linking und Tiered Storage vervollständigen die DR- und Storage-Geschichte in zwölf Szenarien - und das URL-Format des Playgrounds wird öffentlich, mit monedula-sim-link, das einen laufenden Cluster oder die Beschreibung eines KI-Agenten in einen Link verwandelt."
---
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](/kafka-simulator/) 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:

- **[Multi-Region-Cluster-Observer](/kafka-simulator/scenarios/mrc-observers/)** - Replikate, die dem Log folgen, ohne der ISR beizutreten, sodass eine entfernte Kopie auf dem Schreibpfad nichts kostet. [Wie weit sie zurückliegen](/kafka-simulator/scenarios/observer-lag/), [wo man sie platziert](/kafka-simulator/scenarios/durability-vs-latency/) und [wie sie promotet werden](/kafka-simulator/scenarios/observer-promotion/) - einschließlich [des Falls, in dem die Promotion einen Leader braucht, den sie nicht mehr erreichen kann](/kafka-simulator/scenarios/observer-promotion-reachable-leader/).
- **[Cluster Linking](/kafka-simulator/scenarios/cluster-linking-offset-preserving/)** - ein Byte-für-Byte-Mirror, der Offsets bewahrt, sodass ein Consumer nach einem Failover keine Übersetzung braucht. [Mirror-Topics bleiben schreibgeschützt, bis sie promotet werden](/kafka-simulator/scenarios/mirror-read-only-promote-writable/), [committete Consumer-Offsets werden unverändert über den Link synchronisiert](/kafka-simulator/scenarios/consumer-offset-sync-link/), [der Link wird für ein sauberes Failback an Ort und Stelle umgekehrt](/kafka-simulator/scenarios/bidirectional-links-failback/), und [ein Szenario betreibt Cluster Linking auf derselben Topologie Seite an Seite mit MirrorMaker 2](/kafka-simulator/scenarios/cluster-linking-vs-mm2/). Free Play bekommt die passende Steuerung: einen Editor für Regionen und Mirror-Links auf den Zwei-Regionen-Topologien, in dem jeder Link MirrorMaker 2 oder Cluster Linking ist und umgekehrt werden kann.

**Tiered Storage (`tiered-storage`, 2 Szenarien).** Alte Segmente, ausgelagert in Object Storage: [der vollständige Lebenszyklus aus Auslagern, Zurücklesen und Ablauf](/kafka-simulator/scenarios/confluent-tiered-lifecycle/), wobei `localStartOffset` und `logStartOffset` auseinanderlaufen - und [unendliche Retention](/kafka-simulator/scenarios/infinite-retention-tiered/), bei der gealterte Segmente die lokale Platte verlassen, ein zurückliegender Consumer aber trotzdem jedes einzelne von ihnen zurückliest.

## Jede Session ist ein Link

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](/flock/docs/kafka-simulator/reference/url-format/) (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.

## monedula-sim-link: ein echter Cluster als Link

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](/de/flock/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:

```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=…
```

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`](https://github.com/monedula-dev/monedula-sim-link/blob/main/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:

```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
```

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:

```bash
claude mcp add monedula-sim-link -- monedula-sim-link mcp
```

Für Claude Desktop tragen Sie den Server in `claude_desktop_config.json` ein:

```json
{
  "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`](https://github.com/modelcontextprotocol/go-sdk).

monedula-sim-link liegt in einem eigenen Open-Source-Repository, [monedula-dev/monedula-sim-link](https://github.com/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](https://github.com/monedula-dev/monedula-sim-link/releases). 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](https://github.com/monedula-dev/monedula-kafka-simulator-issues/issues/1), 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](/kafka-simulator/), führen Sie mit Cluster Linking ein Failover einer Region durch und teilen Sie den Link.