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:
- Observadores do Multi-Region Cluster - réplicas que acompanham o log sem entrar no ISR, de modo que uma cópia remota não custa nada no caminho de escrita. Quanto os observadores ficam para trás, onde posicioná-los e como são promovidos - incluindo o caso em que a promoção precisa de um líder que ela já não consegue alcançar.
- Cluster Linking - um mirror byte a byte que preserva os offsets, de modo que um consumidor que faz failover não precisa de tradução. Os tópicos espelho continuam somente leitura até serem promovidos, os offsets confirmados dos consumidores são sincronizados pelo link tal como estão, o link se inverte no lugar para um failback limpo, e um cenário executa o Cluster Linking lado a lado com o MirrorMaker 2 na mesma topologia. O free play ganha o controle correspondente: um editor de regiões e de links de mirror nas topologias de duas regiões, onde cada link é MirrorMaker 2 ou Cluster Linking e pode ser invertido.
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.
Toda sessão é um link
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.
monedula-sim-link: um cluster real como link
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 stringactionsbruta 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 doconnectcomo 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.