A v1.9 acrescenta 12 novos cenários - mais dez no módulo dr e dois em um novo módulo tiered-storage - e leva o currículo do Kafka Simulator a 112 de 134. Ela também publica algo de que o simulador depende desde o início: o formato dos seus links.

O que há na v1.9

Mais recuperação de desastres (dr, 10 cenários). Duas respostas de plataforma aos problemas que a v1.8 apresentou com o MirrorMaker 2:

Armazenamento em camadas (tiered-storage, 2 cenários). Segmentos antigos descarregados para o armazenamento de objetos: o ciclo de vida completo de descarga, leitura de volta e expiração, com localStartOffset e logStartOffset se afastando um do outro - e a retenção infinita, em que os segmentos envelhecidos saem do disco local, mas um consumidor atrasado ainda lê de volta cada um deles.

O playground guarda todo o seu estado na URL. Um link pode abrir um cenário roteirizado em um passo específico, reproduzir uma sequência de operações no cluster ou montar um cluster free-play personalizado - e é assim que funciona todo botão de “compartilhar” do simulador.

A partir da v1.9, esse formato é público e está documentado (em inglês): os parâmetros de query, a gramática do log de ações, a codificação da forma do cluster e o que o playground faz com uma entrada que ele não consegue interpretar. Cada exemplo da especificação é decodificado pela própria suíte de testes do simulador, por isso o documento não tem como se desalinhar do código.

Um formato documentado significa que os links podem vir de outro lugar que não o playground - um script, um job de CI ou um agente de IA. O primeiro gerador sai junto com esta versão.

Descrever à mão o cluster com o qual você realmente se importa - broker a broker, tópico a tópico - é demorado e propenso a erros. O monedula-sim-link é uma pequena CLI em Go que se conecta em modo somente leitura a um cluster Kafka real e imprime o link do playground que visualiza esse cluster:

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

O link abre o cluster em execução como um simulador: brokers, tópicos, posicionamento de partições, fator de replicação, brokers offline, lacunas de ISR, grupos de consumidores com os seus membros, configurações de tópico e uma amostra do volume de dados - uma imagem que você pode pausar, percorrer passo a passo, quebrar sem tocar na produção e enviar a um colega no meio de um incidente, em vez de um parágrafo que a descreva.

Somente leitura, e auditável em um único arquivo. Apontar uma ferramenta para um cluster de produção é uma decisão de confiança, por isso a garantia é estreita e explícita. O connect envia apenas requisições de leitura - ApiVersions, Metadata, ListOffsets e, para grupos e configurações, ListGroups, DescribeGroups, OffsetFetch e DescribeConfigs. A requisição Metadata define AllowAutoTopicCreation=false, então nem mesmo consultar um tópico pode criar um tópico. Nenhum registro é produzido, nenhuma configuração é alterada, nenhum grupo recebe um novo membro, nenhum offset é confirmado. Toda a superfície do cliente fica em um único arquivo, snapshot/kafka.go, com testes que provam que uma consulta que falha não cria o tópico automaticamente e que ler os offsets de um grupo nunca os altera.

Se encaixa no jeito como os clusters são protegidos. TLS, TLS mútuo e SASL/SCRAM são suportados, com a senha lida de MONEDULA_SIM_LINK_PASSWORD para que ela fique fora do histórico do 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

Os tópicos são selecionados por nome exato, por regex ou pelos dois, e --dry-run imprime os mapeamentos dos nomes reais para os nomes do simulador e o tamanho de cluster derivado antes de entregar a URL a você. Tudo o que o link codifica é uma descrição compacta da forma e uma amostra do volume; o simulador não tem backend, por isso os seus dados nunca saem da sua máquina.

Um servidor MCP para agentes de IA

O monedula-sim-link mcp fala o Model Context Protocol via stdio, para que o Claude Code, o Claude Desktop ou qualquer outro cliente MCP possam construir links sob demanda. Peça “me mostre um cluster de 6 brokers em que o líder de orders morre” ou “visualize o nosso cluster de staging”, e o agente devolve um link que abre exatamente isso. O servidor expõe quatro ferramentas:

  • build_playground_url - uma sessão free-play a partir de uma descrição declarativa: uma topologia, uma forma de cluster (brokers; tópicos com partições, RF, min.insync.replicas, política de limpeza; rack awareness) e uma lista ordenada de ações temporizadas - produzir registros, matar e reiniciar brokers, adicionar produtores e grupos de consumidores, mudanças de configuração, reatribuição, descarga para o armazenamento em camadas, throttling.
  • open_scenario - o link para um dos cenários roteirizados selecionados, pelo seu id com pontos (por exemplo, 00.1.3).
  • validate_actions - o que o playground de fato carregaria a partir de uma string actions bruta ou de uma URL completa: as ações que sobrevivem, cada entrada descartada com o seu motivo, e o comprimento e a contagem comparados aos limites do codec.
  • cluster_to_url - o snapshot do connect como ferramenta, com a mesma garantia de somente leitura.

Entregar a construção de URLs a um LLM é exatamente onde as coisas dão errado em silêncio - um separador corrompido, um caminho de configuração que o simulador não aceita, um valor de actions acima do limite de comprimento - e o playground descarta silenciosamente o que ele não consegue interpretar. Por isso, toda ferramenta passa pelo mesmo codec fail-fast que a CLI, e nenhuma URL é retornada a menos que o seu valor de actions decodifique de volta para o log idêntico. Quando a validação falha, o erro aponta o campo, o separador ou o caminho de configuração problemático, para que o agente possa corrigir a própria entrada em vez de entregar um link truncado.

Registrar o servidor no Claude Code leva uma linha:

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

No Claude Desktop, adicione-o ao claude_desktop_config.json:

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

O --base-url é opcional; aponte-o para http://localhost:4321/kafka-simulator/playground para gerar links para um servidor de desenvolvimento local. O servidor é construído sobre o modelcontextprotocol/go-sdk oficial.

O monedula-sim-link vive no seu próprio repositório open source, monedula-dev/monedula-sim-link no GitHub - um módulo Go autocontido sob a licença Apache-2.0, instalado com go install ou como binário pré-compilado para Linux, macOS e Windows a partir da página de releases. Ele não envia telemetria e é o gerador de referência do formato de URL: um link gerado pela ferramenta é decodificado no playground exatamente no log que a ferramenta escreveu.

Escalar um cluster do jeito que o Kafka faz

O free play agora muda o número de brokers do jeito que um cluster real faz. Até a v1.9, adicionar um broker rebalanceava silenciosamente as partições para ele - o que, como um leitor apontou, não é o que o Kafka faz. Um broker que você adiciona agora entra vazio: nenhuma partição passa para ele por conta própria, e o inspetor do cluster indica isso, com um botão Rebalance partitions ao lado. No terminal, kafka-reassign-partitions --generate propõe um plano a partir de uma lista de tópicos e de uma lista de brokers, --execute o inicia e --verify o confirma. A outra direção segue a mesma regra: um broker que ainda tem partições precisa ser drenado antes de poder ser removido, na mesma ordem em que você desativaria um broker real.

Abra o simulador, faça o failover de uma região com Cluster Linking e compartilhe o link.