v2.0 はカリキュラムの最後のパックです。schema-registry、authorization、share-groups、capstones の 4 つのモジュールに加えて、storage モジュールに ディスクレストピック のシナリオを 3 本、dr モジュールにアクティブ-アクティブ DR 訓練を 1 本、producer モジュールにラック対応パーティショニングを 1 本追加し、合計で24 本の新しいシナリオとなります。フリープレイでは governance と diskless の階層が解放され、Kafka Simulator のカリキュラムは 136 本中 136 本で完成します。

このリリースは、それらのシナリオを取り巻くプレイグラウンドを作り直したリリースでもあります。v1.9 以降、ほぼすべての部分が変わりました。キャンバスには 3 つのビューができ、タイムラインは読めるものになり、インスペクターはフィールドを並べる代わりに問いに答えるようになり、ターミナルはキャンバスを隠さなくなりました。

v2.0 の内容

Schema Registry(schema-registry、3 本)。 サブジェクトとバージョン、backward、forward、full の互換性がそれぞれ何をチェックするのか、そして登録される前に拒否される破壊的変更です。

認可(authorization、2 本)。 データパス上のアクセス制御です。オーソライザーがデフォルトで拒否するとき、ACL や RBAC のロールバインディングが produce をどう許可し、どう拒否するのかを扱います。

どちらも新しいガバナンス階層とともにフリープレイに登場します。Schema Registry、ACL と RBAC の操作、そしてターミナルの kafka-acls がそろうので、シナリオで見たものを自分の手で組み立て直し、壊してみることができます。

シェアグループ(share-groups、9 本)。 KIP-932 で導入された Kafka のキューセマンティクスです。

シェアグループは Kafka の消費のあり方を変えます。従来のコンシューマーグループと並べて見ると、何が違うのかがよく分かります。

キャップストーン(capstones、5 本)。 耐久性、トランザクション、ストレージ、マルチ DC、ガバナンスを組み合わせ、複数のことが同時に起きるエンドツーエンドのシナリオです。リージョンを失っても生き残る exactly-once の決済パイプライン、データ損失ゼロのリージョンフェイルオーバー、Cluster Linking によるダウンタイムゼロの移行、マルチ DC のアクティブ/アクティブなバックボーン、そしてスループットとレイテンシを同時にチューニングしたパイプラインです。

ディザスタリカバリ(dr、1 本追加)。 アクティブ-アクティブ DR 訓練です。west リージョンを失い、その producer と consumer group を east へ移して書き込みを続け、west を再起動したら元に戻します。何も昇格させず、west がミラーしなかったレコードがその代償です。

プロデューサー(producer、1 本追加)。 ラック対応パーティショニングです。Kafka 4.4 の新機能で、プロデューサーはキーのないレコードを自分のアベイラビリティゾーン内にとどめ、そのゾーンがリーダーを失うまでそれを続けます。詳しくは下の「Apache Kafka 4.4」で説明します。

ディスクレストピック(KIP-1150 の方針、KIP-1163/1164 のドラフト)

ディスクレストピックは、パーティションのデータをブローカーのディスクではなくオブジェクトストレージに置きます。ブローカーは多数のパーティションのレコードをバッファし、1 つの WAL オブジェクトとしてアップロードします。そのオブジェクトをコミットするときにディスクレスコーディネーターがオフセットを割り当て、produce はコミットの時点で ack されます。レプリカはリーダーからフェッチするのではなく、ストレージからオブジェクトを読み戻してログを組み立て、プロデューサーとコンシューマーは自分と同じアベイラビリティゾーンのレプリカを使います。

現状について。KIP-1150 は方針として承認されていますが、仕組みを定義する KIP-1163 と KIP-1164 はまだ Under Discussion です(実装は KAFKA-19161 で追跡されています)。私たちは現在のドラフトをモデル化し、シミュレータ全体で「KIP draft」と表示しています。Kafka に実際に入るまでに、名前や振る舞いが変わる可能性があります。

3 本のシナリオ(storage、05.4.1-05.4.3):

  • ディスクレス: 書き込みパス - 2 つのプロデューサーと 2 つのパーティションが 1 つの WAL オブジェクトを共有し、コーディネーターがコミットするまでオフセットは存在しません。レプリカはデータをオブジェクトストレージから読み戻します。
  • AZ をまたぐレプリケーションなし - 同じ 3 件のレコードを、3 つの AZ にまたがる従来型のトピックとディスクレストピックに送ります。Cross-AZ traffic カードの最終値は、従来型が 7 ホップ、ディスクレスが 0 ホップです。
  • 代償はレイテンシ - 同じ acks=all の produce が、従来型のトピックでは 300 ms、ディスクレストピックでは 1300 ms で ack されます。一方、バッファを満たすバーストは 800 ms で ack されます。各ステップが見えるよう、タイミングは拡大してあります。

フリープレイでは: Diskless 3 AZ プリセット、トピックごとのディスクレス切り替え、そしてディスクレスのタイミング用スライダーが加わります。キャンバスには独自の時間軸を持つオブジェクトストレージのレーン、各ブローカーの下の WAL トレイ、コーディネーターのバッジが、メトリクスパネルには Cross-AZ traffic カードが加わります。ターミナルでは、kafka-topics --create --config diskless.enable=true でディスクレストピックを作成でき、kafka-diskless-metadata(これ自体もドラフトのツールで、まだ Apache Kafka には入っていません)がパーティションごとのオフセットを表示し、ストレージ内の WAL オブジェクトを一覧します。

トレードオフを一言で言えば、AZ をまたぐレプリケーションのトラフィックが減る代わりに、produce が遅くなります。ドラフトが目標とする produce レイテンシは、P50 で約 500 ms、P99 で 1-2 秒です。従来の Kafka でもすでに同じ AZ のフォロワーから読めるので(KIP-392)、ディスクレスが加えるのは、ブローカー間のレプリケーションがなくなることと、produce がリーダーに届く必要がなくなることです。

Apache Kafka 4.4

モデルは今週リリースされた Apache Kafka 4.4 に準拠するようになりました。4.3.0 と 4.4.0 を比較しましたが、シミュレーターが依拠しているデフォルト値、CLI の出力、エラーメッセージで変わったものはありませんでした。シナリオの挙動はこれまでと同じです。

v2.0 は 4.4 の新機能を 1 つモデル化しています。プロデューサーのラック対応パーティショニング(KIP-1123)です。partitioner.rack.aware=true と client.rack を設定すると、デフォルトのパーティショナーはキーのないレコードを、リーダーがプロデューサーと同じアベイラビリティゾーンにあるパーティションへ送ります。そのゾーンにリーダーがなければ、どのパーティションにも送ります。こうしてプロデュースのトラフィックがゾーン内にとどまります。新しいシナリオ ラック対応パーティショニング で両方のケースを見られます。フリープレイでは、プロデューサーのインスペクターにスイッチがあり、サンドボックス開始時のプロデューサーは client.rack を選べます。client.rack がなければ、Kafka と同じくプロデューサーはこの設定を受け付けません。

もう 1 つの 4.4 の新機能、シェアグループのデッドレターキュー(KIP-1191)は、まだモデル化していません。

作り直したプレイグラウンド

クラスタを見る 3 つの方法

キャンバスには 3 つのビューがあり、ツールバーで切り替えます。

  • Brokers はおなじみの絵です。左にプロデューサー、中央にクラスタ、右にコンシューマーグループとシェアグループが並びます。
  • Lanes は、共通のオフセット軸の上にパーティションごとに 1 行を描きます。レプリカはリーダーを先頭に上下に並び、ハイウォーターマークはそれらすべてを貫く 1 本の線になります。遅れているフォロワーはログが目に見えて短く、停止したブローカーのログは動かず、各コンシューマーはコミット済みオフセットとラグを伴って読み取り位置に置かれます。全員がログのどこにいるのかが一目で分かります。
  • Matrix は、描ききれないほど大きなクラスタ向けです。縦にトピック、横にブローカーを並べた表で、Failures、Balance、Lag、Traffic の 4 つのレンズが、表を色分けし、悪いものから順に並べ替えます。ブローカーにホバーすると、停止する前に、クラスタが何を失うのかがトピックごとに表示されます。大きなフリープレイクラスタは、自動的に Matrix で開きます。

キャンバスが変化を見せる

状態の変化は、汎用的なパルスではなく、変化した要素そのものの上で再生されるようになりました。ハイウォーターマークのマーカーは新しいオフセットへスライドし、リーダーの王冠は古いリーダーから新しいリーダーへ移り、フォロワーの ISR タグは変化に応じた色になります。produce されたレコードは自分のログセルに着地し、混み合ったキャンバスではレコードが短い軌跡として描かれます。停止したブローカーは薄く表示されたままキャンバスに残るので、そこに何があったのかが分かります。マルチリージョンのキャンバスでは、ミラーリンクが自分の RPO を示し、各 DC の帯はそれを失ったときのコストを示し、ネットワーク分断ではどちら側がサービスを続けるのかが表示され、KRaft のストリップは過半数を数え、シェアグループのレーンは各レコードのロックタイマーと配信回数を示します。

読めるタイムライン

デスクトップでは、下部のドックが 1 行のレールになりました。フレームは実際のシミュレーション時刻の位置に置かれるので、バーストはひと固まりに、静かな時間は隙間として読み取れます。スクラブはレールに沿ってドラッグするだけです。イベントレーンを開くと、実行中のすべてのイベントが produce、replicate、brokers、consume の各レーンに並び、障害は赤で、各フレームの主要なイベントには印が付きます。

問いに答えるインスペクター

右パネルは、あなたが投げかける問いから始まるようになりました。パーティションはオフセットの定規として、ブローカーは停止したときに失うものとして、トピックはパーティションごとのレーンとして、プロデューサーは送信経路として、コンシューマーグループはレーンまたはパーティションのグリッドとして表示されます。Why は何が壊れたのか、そしてなぜなのかを挙げ、Metrics は役割ごとにまとめられています。一部のインスペクターは、現在の状態だけでなく、次に何が起きるのかも示します。マルチリージョンのビューには DR カードが加わり、各リージョンのログと、まだミラーされていない末尾を RPO として表示します。

キャンバスがターミナルの場所を作る

Kafka CLI ターミナルはこれまでどおりキャンバスの下に収まりますが、キャンバスはその後ろに隠れるのではなく、場所を空けるようになりました。そのため、kafka-server-stop と broker-1 が落ちる様子が同時に画面に映り、ターミナルは入力したコマンドとツールの出力にキャンバスの幅をすべて使えます。ワイドな画面では、タイトルバーの dock side でキャンバスの横の列に移せます。出力は列の揃いを保ち、ホストメニューはすべてのブローカーとコントローラーを並べた ssh の表になりました。ブローカーの設定ファイルは Kafka 4.4 に合わせてあり、kafka-reassign-partitions --generate や、ブローカーを削除する前のドレインも、実際のクラスタと同じように動きます。

ツアーなしで始める

13 ステップのモーダルツアーはなくなりました。代わりに、キャンバスの隅に Getting started カードがあります。同じ内容を、好きな順番で進められるチェックリストにしたもので、各項目に「Show me」が付いています。ヘルプは調べものをするためのリファレンスになりました。台本のあるシナリオは Undo 付きのサンドボックスとしてフォークでき、シナリオは自分から「Try it yourself」の操作や次にやることを提案し、共有されたリンクは、表示している状態にどうやってたどり着いたのかを再生するようになりました。

新しい見た目と、アクセシビリティの見直し

プレイグラウンドを含むサイト全体が、私たちの名前の由来であるコクマルガラスをもとにした新しい見た目になりました。濃いインク色、青い光沢、そしてグレーで、すべてのテキストの色の組み合わせが WCAG AA を満たしています。あわせて、スキップリンクと名前付きのランドマーク領域、タブストップが 1 つだけのシナリオレール、非アクティブ領域の AA コントラスト、押したときのフィードバックと大きくしたタッチターゲット、そして prefers-reduced-motion を尊重し、フェードは残して動きをなくすモーションが加わりました。スマートフォンのレイアウトも個別に見直し、すべてのラベルがまだ収まっているかを確かめるテストまで用意しています。

プレイグラウンドの外で

プレイグラウンド自体は検索エンジンにインデックスされないので、シナリオのテキストが検索エンジンの目に触れることはありませんでした。いまでは /kafka-simulator/scenarios/ の下に、シナリオごとの専用ページがあります。導入と結論、「Open at this step」リンク付きのすべてのステップ、ステップ実行できる実際のキャンバスのフレーム、そしてそのシナリオが扱う Kafka の設定が載っています。v2.0 で、その数は 136 ページになりました。

その隣には、Kafka のエラーや症状を扱う トラブルシューティングページ があります。問題が何を意味するのか、考えられる原因、修正方法とやってはいけないこと、クライアントがリトライするかどうか。各ページは、その問題が起きるシナリオに、まさにそれが起きる瞬間を開いた状態でリンクしています。このリリースで、認可のページも加わりました。変更履歴は、タイムライン上のリリースノートとして読めるようになりました。

もう 1 つだけ

このリリースには、あるものを隠してあります。見つけるのは、あなたにお任せします。

ロードマップの終わり

v2.0 は、v1.0 で始まったものを完成させます。隔週で 11 のパック、136 本のシナリオ。単一ブローカーの解剖から、キューやプラットフォーム全体にわたるキャップストーンまで。すべてがブラウザ内で、決定的に、Apache Kafka 4.4 のセマンティクスに基づいて動きます。バックエンドはなく、あなたのシナリオに関するテレメトリも一切ありません。

カリキュラムは完成しましたが、シミュレータは修了して終わりのコースではなく、サンドボックスです。シミュレータを開き、何かを組み立てて、壊してみてください。