v1.9 dodaje 12 nowych scenariuszy - dziesięć kolejnych w module dr i dwa w nowym module tiered-storage - a program Symulatora Kafki sięga 112 ze 134. To wydanie publikuje też coś, na czym symulator opiera się od samego początku: format jego linków.
Co jest w v1.9
Więcej disaster recovery (dr, 10 scenariuszy). Dwie odpowiedzi platformy na problemy, które v1.8 postawiło przy MirrorMaker 2:
- Observery Multi-Region Cluster - repliki, które podążają za logiem, nie dołączając do ISR, więc zdalna kopia nic nie kosztuje na ścieżce zapisu. Jak bardzo zostają w tyle, gdzie je umieścić i jak są awansowane - łącznie z przypadkiem, w którym awans wymaga lidera, do którego nie może już dotrzeć.
- Cluster Linking - mirror bajt w bajt, który zachowuje offsety, więc konsument po failoverze nie potrzebuje żadnej translacji. Tematy lustrzane pozostają tylko do odczytu, dopóki nie zostaną awansowane, zatwierdzone offsety konsumentów synchronizują się przez link w niezmienionej postaci, link odwraca się w miejscu, co daje czysty failback, a jeden scenariusz uruchamia Cluster Linking obok MirrorMaker 2 na tej samej topologii. Free play zyskuje odpowiadającą temu kontrolkę: edytor regionów i linków mirrorujących w topologiach dwuregionowych, gdzie każdy link to MirrorMaker 2 albo Cluster Linking i można go odwrócić.
Tiered storage (tiered-storage, 2 scenariusze). Stare segmenty zrzucane do object storage: pełny cykl życia zrzutu, odczytu z powrotem i wygaśnięcia, w którym localStartOffset i logStartOffset się rozjeżdżają - oraz nieskończona retencja, w której postarzałe segmenty opuszczają dysk lokalny, a konsument z zaległościami wciąż odczytuje z powrotem każdy z nich.
Każda sesja to link
Playground trzyma cały swój stan w URL-u. Link może otworzyć scenariusz pisany z góry na wybranym kroku, odtworzyć sekwencję operacji na klastrze albo postawić własny klaster w free play - i właśnie tak działa każdy przycisk „udostępnij” w symulatorze.
Od v1.9 ten format jest publiczny i udokumentowany (po angielsku): parametry zapytania, gramatyka logu akcji, kodowanie kształtu klastra oraz to, co playground robi z wpisem, którego nie potrafi sparsować. Każdy przykład ze specyfikacji jest dekodowany przez własny zestaw testów symulatora, więc dokument nie może rozjechać się z kodem.
Udokumentowany format oznacza, że linki mogą pochodzić z innego miejsca niż playground - ze skryptu, z zadania CI albo od agenta AI. Pierwszy generator wychodzi razem z tym wydaniem.
monedula-sim-link: prawdziwy klaster jako link
Ręczne opisywanie klastra, na którym naprawdę ci zależy - broker po brokerze, temat po temacie - jest żmudne i podatne na błędy. monedula-sim-link to małe CLI w Go, które łączy się z prawdziwym klastrem Kafki wyłącznie do odczytu i wypisuje link do playgroundu wizualizujący ten klaster:
$ 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=…
Link otwiera działający klaster jako symulację: brokery, tematy, rozmieszczenie partycji, współczynnik replikacji, brokery offline, luki ISR, grupy konsumentów wraz z ich członkami, konfiguracje tematów i próbkę wolumenu danych - obraz, który możesz zatrzymać, przejść krok po kroku, zepsuć bez dotykania produkcji i wysłać koledze z zespołu w środku incydentu zamiast akapitu z opisem.
Tylko do odczytu i do zweryfikowania w jednym pliku. Skierowanie narzędzia na produkcyjny klaster to decyzja o zaufaniu, więc gwarancja jest wąska i jawna. connect wysyła wyłącznie żądania odczytu - ApiVersions, Metadata, ListOffsets, a dla grup i konfiguracji ListGroups, DescribeGroups, OffsetFetch i DescribeConfigs. Żądanie Metadata ustawia AllowAutoTopicCreation=false, więc nawet wyszukanie tematu nigdy go nie utworzy. connect nie produkuje żadnych rekordów, nie zmienia konfiguracji, nie dołącza do żadnej grupy i nie zatwierdza żadnego offsetu. Cała powierzchnia klienta mieści się w jednym pliku, snapshot/kafka.go, wraz z testami dowodzącymi, że nieudane wyszukanie nie tworzy automatycznie tematu i że odczyt offsetów grupy nigdy ich nie zmienia.
Pasuje do tego, jak zabezpiecza się klastry. Obsługiwane są TLS, mutual TLS i SASL/SCRAM, a hasło jest odczytywane z MONEDULA_SIM_LINK_PASSWORD, więc nie trafia do historii powłoki:
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
Tematy wybiera się po dokładnej nazwie, wyrażeniem regularnym albo na oba sposoby, a --dry-run wypisuje mapowania prawdziwych nazw na nazwy w symulatorze oraz wyliczony rozmiar klastra, zanim poda ci URL. Wszystko, co koduje link, to zwięzły opis kształtu i próbka wolumenu; symulator nie ma backendu, więc twoje dane nigdy nie opuszczają twojej maszyny.
Serwer MCP dla agentów AI
monedula-sim-link mcp komunikuje się przez stdio w protokole Model Context Protocol, więc Claude Code, Claude Desktop albo dowolny inny klient MCP może budować linki na żądanie. Poproś: „pokaż mi klaster z 6 brokerami, w którym umiera lider dla orders” albo „zwizualizuj nasz klaster stagingowy”, a agent zwróci link, który otwiera dokładnie to. Serwer udostępnia cztery narzędzia:
build_playground_url- sesja free-play z deklaratywnego opisu: topologia, kształt klastra (brokery; tematy z partycjami, RF,min.insync.replicas, polityką czyszczenia; świadomość racków) i uporządkowana lista akcji z określonym czasem - produkowanie rekordów, ubijanie i restartowanie brokerów, dodawanie producentów i grup konsumentów, zmiany konfiguracji, realokacja, zrzut do tiered storage, dławienie.open_scenario- link do jednego z wyselekcjonowanych scenariuszy pisanych z góry, według jego identyfikatora z kropkami (np.00.1.3).validate_actions- co playground faktycznie wczytałby z surowego ciąguactionsalbo pełnego URL-a: akcje, które przetrwały, każdy odrzucony wpis wraz z powodem oraz długość i liczba w zestawieniu z limitami kodeka.cluster_to_url- migawka zconnectw postaci narzędzia, z tą samą gwarancją tylko do odczytu.
Oddanie budowania URL-i w ręce LLM to dokładnie to miejsce, w którym coś niepostrzeżenie idzie nie tak - zniekształcony separator, ścieżka konfiguracji, której symulator nie akceptuje, wartość actions ponad limitem długości - a playground po cichu odrzuca to, czego nie potrafi sparsować. Dlatego każde narzędzie przechodzi przez ten sam kodek fail-fast co CLI i żaden URL nie zostaje zwrócony, jeśli jego wartość actions nie dekoduje się z powrotem do identycznego logu. Gdy walidacja się nie powiedzie, błąd wskazuje problematyczne pole, separator albo ścieżkę konfiguracji, więc agent może poprawić swoje dane wejściowe, zamiast oddać ucięty link.
Zarejestrowanie serwera w Claude Code to jedna linia:
claude mcp add monedula-sim-link -- monedula-sim-link mcp
W Claude Desktop dodaj go do claude_desktop_config.json:
{
"mcpServers": {
"monedula-sim-link": {
"command": "monedula-sim-link",
"args": ["mcp", "--base-url", "https://monedula.dev/kafka-simulator/playground"]
}
}
}
--base-url jest opcjonalny; ustaw go na http://localhost:4321/kafka-simulator/playground, żeby generować linki prowadzące do lokalnego serwera deweloperskiego. Serwer jest zbudowany na oficjalnym modelcontextprotocol/go-sdk.
monedula-sim-link ma własne repozytorium open source, monedula-dev/monedula-sim-link na GitHubie - samodzielny moduł Go na licencji Apache-2.0, instalowany przez go install albo jako gotowy plik binarny dla Linuksa, macOS i Windows ze strony wydań. Narzędzie nie wysyła telemetrii i jest generatorem referencyjnym formatu URL: link, który generuje, dekoduje się w playgroundzie dokładnie do logu, który ono zapisało.
Skalowanie klastra tak, jak robi to Kafka
Free play zmienia teraz liczbę brokerów tak, jak robi to prawdziwy klaster. Przed v1.9 dodanie brokera po cichu przerzucało na niego partycje - a, jak zauważył jeden z czytelników, Kafka tak nie robi. Dodany broker dołącza teraz pusty: żadna partycja nie przenosi się na niego sama, a inspektor klastra mówi o tym wprost i pokazuje obok przycisk Rebalance partitions. W terminalu kafka-reassign-partitions --generate proponuje plan na podstawie listy tematów i listy brokerów, --execute go uruchamia, a --verify potwierdza. W drugą stronę obowiązuje ta sama zasada: broker, który wciąż trzyma partycje, trzeba zdrenować, zanim będzie można go usunąć, w tej samej kolejności, w jakiej wycofywałbyś z eksploatacji prawdziwy broker.
Otwórz symulator, zrób failover regionu przez Cluster Linking i udostępnij link.