monedula-gitops
Apache Kafka のための GitOps ツール。トピック、アクセス、クォータ、スキーマ、SCRAM ユーザー、Confluent RBAC を CLI または Kubernetes オペレーターで扱います。
このページは英語から機械翻訳されています。 原文を読む
monedula-sim-link v0.11.0, Apache-2.0
実際の Kafka クラスターを可視化するために、monedula-sim-link はそのスナップショットを 1 回取得し、そのクラスターと同じ形の Kafka Simulator を開くリンクを出力します。ブローカー、トピック、パーティションの配置、障害、データ量のサンプル、コンシューマーグループ、トピックの設定まで再現します。リンクを共有することも、AI エージェントに 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…
ここでは出力されたリンクを短縮しています。
connectブローカー、トピック、パーティション、コンシューマーグループ、トピックの設定を一度だけ読み取ります。
名前をマッピングブローカーは broker-1 から broker-N になります。シミュレーターが扱えない名前は変更され、--dry-run で対応表を確認できます。
バリデーションリンクは、デコードすると同じアクションに戻り、かつ 2048 文字に収まっていなければなりません(--force が緩めるのは長さだけです)。そうでなければリンクは出力されません。
URL を出力標準出力にリンクを 1 つ出します。同じスナップショットからは常に同じ URL が得られます。
リンクを開くプレイグラウンドが、お使いのクラスターと同じ形のフリープレイセッションを開きます。
connect はレコードをプロデュースせず、トピックや設定を作成も変更もせず、コンシューマーグループに参加せず、オフセットもコミットしません。Metadata リクエストは AllowAutoTopicCreation=false を付けて送られるため、トピックを参照してもそれが作成されることは決してありません。クラスター、そのトピック、コンシューマーグループ、トピックの設定を describe できるプリンシパルがあれば十分です。より多くの権限が必要なのは、オプションの --producers だけです。その DescribeProducers リクエストには、選択したトピックに対する Read 権限が必要です。
Kafka クライアントとしての処理全体が 1 つのソースファイル snapshot/kafka.go にまとまっているので、この保証を 1 か所で監査できます。また、Apache Kafka と Confluent Platform のイメージを使った 3 ノード KRaft クラスターに対するエンドツーエンドのテストスイートが、何も変わっていないことを確認します。
読み取り専用の保証(英語)
ApiVersions | クライアントのハンドシェイク |
|---|---|
Metadata | ブローカー、トピック、リーダー、レプリカ、同期レプリカ |
ListOffsets | 各パーティションの最も古いオフセットと最新のオフセット |
ListGroups | コンシューマーグループ |
FindCoordinator | 各グループのコーディネーターの検索 |
DescribeGroups | グループの状態とメンバー |
OffsetFetch | グループがコミットしたオフセット |
DescribeConfigs | 選択したトピックの設定 |
DescribeProducers | --producers を付けた場合のみ。最近書き込んだ冪等プロデューサーとトランザクショナルプロデューサー |
リンクは、お使いのクラスターと同じ形をした Kafka Simulator のフリープレイセッションを開きます。1 つのスナップショットからの再構成なので、何が近似なのかを明示しています。実際の正確なオフセット、コントローラー、ラックの配置は引き継がれず、レコードは合成されたものです。
リンクが示すもの(英語)
cleanup.policy, min.insync.replicas, retention.ms, retention.bytesプレイグラウンドは不正な形式のエントリを黙って捨てるため、わずかに誤ったリンクは、正しく見えて別のものを表示するセッションを開いてしまいます。
出力前のセルフバリデーション(英語)
| 1 | アクションログはラウンドトリップできなければなりません。エンコード、デコード、エンコードして同一であること。このチェックは決して無効にできません。 |
|---|---|
| 2 | リンクは 2048 文字以内でなければなりません。--force を付けると、このチェックは警告に格下げされます。 |
実際のクラスター
平文、TLS、または mutual TLS で接続でき、SASL PLAIN、SCRAM-SHA-256、SCRAM-SHA-512 を使えます。トピックは正確な名前、正規表現、またはその両方で選べます。
シェルの履歴にシークレットが残らないよう、--password よりも環境変数 MONEDULA_SIM_LINK_PASSWORD を使ってください。
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 は、リンクの前に、サイズのパラメーター、実際のブローカー名、トピック名、グループ名をシミュレーターに表示される名前に対応付ける表、そしてデコードされたアクションのリストを出力します。
手元にクラスターがなくても、demo --dry-run で組み込みのフィクスチャを同じパイプラインに通せます。ここに示した出力は、そのフィクスチャによるものです。
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
... AI エージェント向け
monedula-sim-link mcp は stdio 上で Model Context Protocol を提供するので、Claude Code、Claude Desktop、その他の MCP クライアントがリンクを作成できます。4 つのツールは build_playground_url、open_scenario、validate_actions、cluster_to_url で、最後の 1 つは connect と同じ方法で稼働中のクラスターのスナップショットを取ります。
MCP サーバーを使う(英語)
{
"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 amd64 と arm64 の Linux、macOS、Windows 向けのリリースアーカイブは、チェックサムファイルとともにリリースページにあります。ソースからビルドするには Go 1.25 以降が必要です。次のステップ:シミュレーターで自分のクラスターを見る(英語)。
connect は接続先のクラスター以外とは通信せず、最後にリンクを出力します。認証情報は接続を開くためだけに使われ、リンクには含まれません。リンクではブローカーが broker-1 から broker-N と名付けられ、ツールがレコードのキーや値を読むことはありません。リンクに入るのはトポロジーです。ブローカー数、表示するトピックの名前、そのパーティション数、レプリケーションファクター、選択した設定、コンシューマーグループ名、client ID から導いたメンバー名、--producers を付けた場合は最近書き込んだ最大 4 つのプロデューサーの ID、そして障害の情報です。リンクを共有するときは、これらの名前が含まれていると考え、--topics で共有してよいトピックだけを表示してください。詳しくはリンクが示すもの(英語)をご覧ください。connect は動きの多いトピックとコンシューマーグループを残し、どれを残したかを警告で示します。まず --topics で指定したトピック、次に複製不足またはオフラインのパーティション、コンシューマーラグ、読み取るグループがあるトピック、そしてラグが最も大きいグループです。ブローカーが 10 台、またはトピックあたりのパーティションが 24 個を超えると、失敗してリンクを出力しません。--clamp を渡すと、それらを決定的に切り詰めます。詳しくは大規模クラスターの扱い(英語)をご覧ください。同じチームによる、Apache Kafka のための無料ツールがほかにもあります。Flock について
Apache Kafka のための GitOps ツール。トピック、アクセス、クォータ、スキーマ、SCRAM ユーザー、Confluent RBAC を CLI または Kubernetes オペレーターで扱います。
Apache Kafka の ACL を、チェックサム付きの計画を通じて Confluent RBAC のロールバインディングに変換する CLI。ACL が削除される前に実効アクセスを検証します。
ブローカー、JVM、KIP-714 クライアントのメトリクスを OTLP で送る Kafka MetricsReporter プラグイン。collector が停止しても Kafka がブロックされることはありません。
ブラウザで動く、インタラクティブで決定的な Apache Kafka シミュレーター。クラスターを壊し、タイムラインをスクラブして、なぜそう反応したのかを読み解けます。