LinkdInが4月のKafka Summitで,同社のKafka Monitorを,Apache 2.0ライセンスのオープンソースとして公開した。先頃にはアーキテクチャの詳細と,開発に至った理由を公開している。同社は今年初めにも,自社のKafka利用に関する公開資料の中でKafka Monitorについて簡単に言及していたが,プロジェクトの意義に関する詳細や開発の動機などについては,そこには詳しく説明されていなかった。
Kafka Monitorの開発動機は3つある。
- Kafkaデプロイメントのモニタとテストの必要性。メイントランクの安定性を常に把握することにより,実行中の変更による問題をできる限り早く確認することが可能になる。
- 実運用クラスタのSLAの継続的監視と,レグレッションテストの継続的実行の必要性。
- 既存の監視フレームワークでは拡張性やモジュール性が同社のユースケースに適合しなかったり,特別なクライアントライブラリが必要であったりしたため。
SRA(Site Reliability Engineering)部門ではこれまで,バイトレート(bytes-in-rate)やオフラインパーティション数,レプリケーション数不足(under-replicated)パーティション数などのメトリクスを監視して,Kafkaクラスタの可用性やシステム全体の状態を判断していた。しかしながら,このような低レベルな値はエンドユーザのエクスペリエンスという面での本当の可用性を示すものではなく,その指標にもなり得ないという問題があった。
LinkedInは同社のKafka監視ニーズに対する選択肢として,Microsoftのプロジェクトや,NetflixのKeystone Pipelineに関する公開資料で取り上げられたKafka監視ツールについても言及しているが,いずれも同社のユースケースにはマッチしないと判断された。
Kafka MonitorではGC停止やブローカのハードキル(hard-kill),ローリングバウンス(rolling bounce),ディスク障害など,さまざまな障害シナリオをエミュレートするようにモジュールを構成して,それらのシナリオが現実になった場合のサービスの振る舞いに関する測定値を収集することが可能だ。プロデューササービスのエラー率は,例外がスローされた場合や,プロデューサがメッセージを生成した場合のメトリクスの上昇度によって決定される。コンシューマサービスについては,Kafkaパーティションによってセグメント化されたインデックスカウンタやペイロード内のメッセージのタイムスタンプを追跡することにより,メッセージの損失率や重複率,エンドツーエンドの遅延量を計測することが可能である。
Kafka Monitorのインスタンスは,単一のJavaプロセスとして動作する。ユーザあるいはコンシューマサービスとKafkaクラスタ自体との間に位置して,さまざまなテストを実行する。収集される実行時メトリクスとしては,プロデューササービスの生成率とコンシューマサービスの消費率,メッセージ損失,メッセージ重複,エンドツーエンドのレイテンシなどがある。複数のKafka Monitorを使って,複数のKafkaクラスタを対象とした大規模なテストシナリオを実行することも可能だ。これらはレプリケーションサービスを通じてミラーされることにより,クラスタ間のレイテンシを測定することができる。
Kafka MonitorはJavaをネイティブサポートするだけでなく,Java以外の言語用にRESTインターフェースも提供している。オープンソースコミュニティで特に重要なものとして,LinkedInのDong Lin氏は次のように述べている。
私たちは通常ではApache Kafkaのトランクを運用していますが,新機能をピックアップするために,四半期に1回程度の割合で内部リリースをカットしています。トランクから離れることの大きなメリットは,LinkedInの運用クラスタにKafkaをデプロイする際に,トランクの問題を見つけることが少なからずあるのですが,それらをApackeからの公式リリースに先んじて修正できる,という点です。
Kafkaのメイントランクと密接な関係にあることから,LiunkedInでは,Kafkaプロジェクト自体に含まれているのと同じようなシステムテストを実装して,チェックイン毎に実行することを計画している。さらにSimoorgなどのフォールトインジェクションフレームワークや,Graphiteあるいは同様なフレームワークとKafka Monitorを統合して,Kafka Monitorクラスタ全体で生成されたすべてのメトリクスを,単一のWebサービスを通じて可視化できるようにしたいとも考えている。
LinkedInはまた,代表的なメトリクスの発行や可視化を行なうための,基本的なモニタをセットアップする方法についても簡単に説明している。詳細は同社のgithubページで確認することが可能だ。
この記事を評価
- 編集者評
- 編集長アクション