monedula-gitops
GitOps for Apache Kafka: topics, access, quotas, schemas, SCRAM users and Confluent RBAC, from a CLI or a Kubernetes operator.
monedula-sim-link v0.11.0, Apache-2.0
To visualize a real Kafka cluster, monedula-sim-link takes one snapshot of it and prints a link that opens the Kafka Simulator shaped like the cluster: brokers, topics, partition placement, failures, a sample of data volume, consumer groups and topic configs. Share the link, or let an AI agent build it over MCP.
go install github.com/monedula-dev/monedula-sim-link/cmd/monedula-sim-link@latest VERSION=0.11.0
curl -L -o monedula-sim-link.tar.gz \
https://github.com/monedula-dev/monedula-sim-link/releases/download/v${VERSION}/monedula-sim-link_${VERSION}_linux_amd64.tar.gz
tar -xzf monedula-sim-link.tar.gz monedula-sim-link monedula-sim-link connect --brokers localhost:9092 --topics orders,payments# one snapshot of orders and payments, printed as one linkhttps://monedula.dev/kafka-simulator/playground?scenario=free&actions=…&size=3x6x3x…
The printed link is shortened here.
connectRead the brokers, topics, partitions, consumer groups and topic configs once.
map namesBrokers become broker-1 to broker-N. Names the simulator cannot carry are renamed, and --dry-run shows the tables.
validateThe link must decode to the same actions and fit in 2048 characters (--force relaxes only the length), or no link is printed.
print the URLOne link on standard output. The same snapshot always gives the same URL.
open the linkThe playground opens a free-play session shaped like your cluster.
connect produces no records, creates or alters no topics or configs, joins no consumer group and commits no offset. The Metadata request is sent with AllowAutoTopicCreation=false, so looking up a topic can never create it. A principal that may describe the cluster, its topics, its consumer groups and its topic configs is enough. Only the opt-in --producers flag needs more: its DescribeProducers request needs READ on the selected topics.
The whole client surface lives in one source file, snapshot/kafka.go, so you can audit the guarantee in one place, and an end-to-end suite against a three-node KRaft cluster, with Apache Kafka and Confluent Platform images, checks that nothing changed.
ApiVersions | the client handshake |
|---|---|
Metadata | brokers, topics, leaders, replicas, in-sync replicas |
ListOffsets | earliest and latest offset of each partition |
ListGroups | the consumer groups |
FindCoordinator | the lookup of the coordinator of each group |
DescribeGroups | their state and members |
OffsetFetch | the offsets they committed |
DescribeConfigs | the configs of the selected topics |
DescribeProducers | only with --producers: the idempotent and transactional producers that wrote lately |
The link opens a free-play session of the Kafka Simulator that is shaped like your cluster. It is a reconstruction from one snapshot, so it says what it approximates: exact real offsets, the controller and rack layout are not carried, and the records are synthetic.
cleanup.policy, min.insync.replicas, retention.ms, retention.bytesThe playground drops malformed entries silently, so a subtly wrong link would open a session that looks right and shows something else.
| 1 | The action log must round-trip: encode, decode, encode, identical. Never overridable. |
|---|---|
| 2 | The link must be at most 2048 characters. --force downgrades this check to a warning. |
Real clusters
Connect over plaintext, TLS or mutual TLS, with SASL PLAIN, SCRAM-SHA-256 or SCRAM-SHA-512. Pick topics by exact name, by regular expression, or both.
Prefer the MONEDULA_SIM_LINK_PASSWORD environment variable to --password, so the secret stays out of your shell history.
export MONEDULA_SIM_LINK_PASSWORD='...'
monedula-sim-link connect \
--brokers broker1.example.com:9093,broker2.example.com:9093 \
--tls --ca-cert ./cluster-ca.pem \
--sasl-mechanism scram-sha-512 --username viewer --dry-run prints the size parameter, the tables that map real broker, topic and group names to the names the simulator shows, and the decoded action list, before the link.
With no cluster at hand, demo --dry-run runs a built-in fixture through the same pipeline. The output shown is from that fixture.
monedula-sim-link demo --dry-run
size: 4x3x3xpayments~1~2~1~d~~~~
brokers:
1 -> broker-1
2 -> broker-2
3 -> broker-3
4 -> broker-4
topics:
orders -> orders
payments -> payments
actions (19 entries):
RP:p1@500
RG:c1@750
RA:orders:2:broker-3.broker-1.broker-2@1000
K:broker-4@1250
SR:broker-2:1@1500
... For AI agents
monedula-sim-link mcp serves the Model Context Protocol over stdio, so Claude Code, Claude Desktop or another MCP client can build links. Its four tools are build_playground_url, open_scenario, validate_actions and cluster_to_url, which snapshots a live cluster the same way connect does.
{
"mcpServers": {
"monedula-sim-link": {
"command": "monedula-sim-link",
"args": ["mcp"]
}
}
} go install github.com/monedula-dev/monedula-sim-link/cmd/monedula-sim-link@latest VERSION=0.11.0
curl -L -o monedula-sim-link.tar.gz \
https://github.com/monedula-dev/monedula-sim-link/releases/download/v${VERSION}/monedula-sim-link_${VERSION}_linux_amd64.tar.gz
tar -xzf monedula-sim-link.tar.gz monedula-sim-link Release archives for Linux, macOS and Windows on amd64 and arm64, with a checksums file, are on the releases page. Building from source needs Go 1.25 or newer. Next: see your cluster in the simulator.
connect talks to your cluster and nothing else, then prints a link. Your credentials are used only to open the connection and are not part of the link, the link names brokers broker-1 to broker-N, and the tool never reads the keys or values of your records. What does go into the link is the topology: the broker count, the names of the shown topics, their partition counts, replication factors and selected configs, the consumer group names, member names derived from client IDs, with --producers the producer IDs of up to four recent writers, and any failures. Treat the link as containing those names when you share it, and use --topics to show only the topics you are happy to share. See what the link shows.connect keeps the most eventful topics and consumer groups and warns which it kept: the topics you list with --topics first, then topics with under-replicated or offline partitions, consumer lag or readers, and the groups with the most lag. Over 10 brokers or 24 partitions per topic it fails and prints no link, unless you pass --clamp to trim them deterministically. See handle large clusters.We can help you run monedula-sim-link across a large estate, from design to day-to-day operations.
More free tools for Apache Kafka from the same team. About Flock
GitOps for Apache Kafka: topics, access, quotas, schemas, SCRAM users and Confluent RBAC, from a CLI or a Kubernetes operator.
A CLI that converts Apache Kafka ACLs into Confluent RBAC role bindings through a checksummed plan and verifies effective access before any ACL is deleted.
A Kafka MetricsReporter plugin that ships broker, JVM and KIP-714 client metrics over OTLP; a collector outage never blocks Kafka.
An interactive, deterministic Apache Kafka simulator in the browser: break a cluster, scrub the timeline and read why it reacted.