v1.9 añade 12 escenarios nuevos - diez más en el módulo dr y dos en un nuevo módulo tiered-storage - y lleva el temario del Kafka Simulator a 112 de 134. Además publica algo en lo que el simulador se ha apoyado desde el principio: el formato de sus enlaces.

Qué trae la v1.9

Más recuperación ante desastres (dr, 10 escenarios). Dos respuestas de plataforma a los problemas que la v1.8 planteó con MirrorMaker 2:

Almacenamiento por niveles (tiered-storage, 2 escenarios). Segmentos antiguos descargados al almacenamiento de objetos: el ciclo de vida completo de descarga, relectura y expiración, con localStartOffset y logStartOffset separándose - y la retención infinita, donde los segmentos envejecidos salen del disco local pero un consumidor rezagado aun así vuelve a leerlos todos.

Cada sesión es un enlace

El playground guarda todo su estado en la URL. Un enlace puede abrir un escenario guionizado en un paso concreto, reproducir una secuencia de operaciones sobre el clúster o levantar un clúster de free play personalizado - y así es como funciona cada botón de «compartir» del simulador.

Desde la v1.9 ese formato es público y está documentado (en inglés): los parámetros de consulta, la gramática del registro de acciones, la codificación de la forma del clúster y lo que hace el playground con una entrada que no puede analizar. La propia batería de tests del simulador decodifica cada ejemplo de la especificación, así que el documento no puede desincronizarse del código.

Un formato documentado significa que los enlaces pueden venir de otro sitio que no sea el playground - un script, un job de CI o un agente de IA. El primer generador llega con esta versión.

Describir a mano el clúster que de verdad te importa - broker por broker, topic por topic - es tedioso y propenso a errores. monedula-sim-link es una pequeña CLI en Go que se conecta en modo de solo lectura a un clúster de Kafka real e imprime el enlace del playground que lo visualiza:

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

El enlace abre el clúster en vivo como un simulador: brokers, topics, colocación de particiones, factor de replicación, brokers fuera de línea, huecos de ISR, grupos de consumidores con sus miembros, configuraciones de topic y una muestra del volumen de datos - una imagen que puedes pausar, recorrer paso a paso, romper sin tocar producción y enviar a un compañero en mitad de un incidente en lugar de un párrafo que la describa.

Solo lectura, y auditable en un solo archivo. Apuntar una herramienta a un clúster de producción es una decisión de confianza, así que la garantía es acotada y explícita. connect emite únicamente peticiones de lectura - ApiVersions, Metadata, ListOffsets y, para grupos y configuraciones, ListGroups, DescribeGroups, OffsetFetch y DescribeConfigs. Metadata fija AllowAutoTopicCreation=false, así que ni siquiera buscar un topic puede llegar a crearlo. No se produce ningún registro, no se cambia ninguna configuración, no se entra en ningún grupo, no se confirma ningún offset. Toda la superficie del cliente vive en un solo archivo, snapshot/kafka.go, con tests que demuestran que una búsqueda fallida no crea automáticamente el topic y que leer los offsets de un grupo nunca los cambia.

Se adapta a cómo se protegen los clústeres. Se admiten TLS, TLS mutuo y SASL/SCRAM, y la contraseña se lee de MONEDULA_SIM_LINK_PASSWORD para que no quede en el historial de la 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

Los topics se seleccionan por nombre exacto, por regex o de ambas formas, y --dry-run imprime las correspondencias de nombres entre el clúster real y el simulador y el tamaño de clúster derivado antes de darte la URL. Todo lo que codifica el enlace es una descripción compacta de la forma y una muestra del volumen; el simulador no tiene backend, así que tus datos nunca salen de tu máquina.

Un servidor MCP para agentes de IA

monedula-sim-link mcp habla el Model Context Protocol sobre stdio, de modo que Claude Code, Claude Desktop o cualquier otro cliente MCP pueden construir enlaces a petición. Pide «muéstrame un clúster de 6 brokers en el que muere el líder de orders» o «visualiza nuestro clúster de staging», y el agente devuelve un enlace que abre exactamente eso. El servidor expone cuatro herramientas:

  • build_playground_url - una sesión de free play a partir de una descripción declarativa: una topología, una forma de clúster (brokers; topics con particiones, RF, min.insync.replicas, política de limpieza; rack awareness) y una lista ordenada de acciones programadas - producir registros, matar y reiniciar brokers, añadir productores y grupos de consumidores, cambios de configuración, reasignación, descarga al almacenamiento por niveles, throttling.
  • open_scenario - el enlace a uno de los escenarios guionizados seleccionados, por su identificador con puntos (p. ej. 00.1.3).
  • validate_actions - lo que el playground cargaría realmente a partir de una cadena actions en bruto o de una URL completa: las acciones que sobreviven, cada entrada descartada con su motivo, y la longitud y el recuento frente a los límites del códec.
  • cluster_to_url - la instantánea de connect como herramienta, con la misma garantía de solo lectura.

Dejar la construcción de URLs en manos de un LLM es justo donde las cosas se tuercen sin hacer ruido - un separador mal formado, una ruta de configuración que el simulador no acepta, un valor actions que supera el límite de longitud - y el playground descarta en silencio lo que no puede analizar. Por eso cada herramienta pasa por el mismo códec fail-fast que la CLI, y no se devuelve ninguna URL a menos que su valor actions se decodifique de vuelta exactamente en el mismo log. Cuando la validación falla, el error indica el campo, el separador o la ruta de configuración culpables, para que el agente pueda corregir su entrada en lugar de entregar un enlace truncado.

Registrarlo en Claude Code requiere una sola línea:

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

Para Claude Desktop, añádelo a claude_desktop_config.json:

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

--base-url es opcional; apúntalo a http://localhost:4321/kafka-simulator/playground para generar enlaces contra un servidor de desarrollo local. El servidor está construido sobre el modelcontextprotocol/go-sdk oficial.

monedula-sim-link vive en su propio repositorio de código abierto, monedula-dev/monedula-sim-link en GitHub - un módulo de Go autocontenido bajo la licencia Apache-2.0, que se instala con go install o como binario precompilado para Linux, macOS y Windows desde la página de releases. La herramienta no envía telemetría y es el generador de referencia del formato de URL: un enlace que produce se decodifica en el playground exactamente en el log que escribió.

Escalar un clúster como lo hace Kafka

El free play cambia ahora el número de brokers como lo hace un clúster real. Hasta la v1.9, añadir un broker rebalanceaba en silencio particiones hacia él - lo cual, como señaló un lector, no es lo que hace Kafka. Ahora, un broker que añades entra vacío: ninguna partición se mueve a él por sí sola, y el inspector del clúster lo indica, con un botón Rebalance partitions al lado. En el terminal, kafka-reassign-partitions --generate propone un plan a partir de una lista de topics y una lista de brokers, --execute lo inicia y --verify lo confirma. La otra dirección sigue la misma regla: un broker que aún tiene particiones tiene que drenarse antes de poder retirarlo, en el mismo orden en que darías de baja uno real.

Abre el simulador, haz failover de una región con Cluster Linking y comparte el enlace.