kafka-consumer-lag について
kafka-consumer-lagは、Kafkaのコンシューマー遅延やインシデントを調査するエンジニア向けのスキルです。グループの状態とパーティション別の遅延を調べ、分布やスループットの情報から原因を診断し、グループごとの対処案を示します。
主な機能
- 01コンシューマーグループの状態と遅延を取得
- 02高遅延、アイドル、リバランス中のグループを特定
- 03パーティションとスループットから原因を診断
- 04グループごとの対処案を提示
- 05メッセージを抽出してデータフローを確認
活用シーン
- 01コンシューマーの滞留増加を調査
- 02特定トピックの遅延を確認
- 03コミット済みオフセットがある停止グループを特定
MCP 対応
Lenses MCPでコンシューマーグループ、トピックパーティション、メッセージスループットを確認し、SQLで直近のメッセージを抽出して遅延の診断に役立てます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ lensesio/ agentic-engineering-for-apache-kafka --skill kafka-consumer-lagインストール後、Claude Code で/kafka-consumer-lagを入力して読み込まれたか確認します。
同梱ファイルreferences/test-cases.md
詳細
Kafka コンシューマーラグ分析
すべてのグループのコンシューマーグループラグを分析し、考えられる原因を診断します。コンシューマーラグは、Kafka で最もよく監視されるメトリクスであり、インシデント発生時にエンジニアが最初に確認する項目です。
対象環境:$ARGUMENTS
ワークフロー
このチェックリストをコピーして、進捗を記録してください。
Lag Analysis Progress:
- [ ] Step 1: Fetch all consumer groups
- [ ] Step 2: Identify problematic groups
- [ ] Step 3: Diagnose root causes
- [ ] Step 4: Generate report
- すべてのコンシューマーグループを取得し、状態とラグ情報を確認する
- 問題のあるグループを特定する(ラグが大きい、アイドル状態、リバランス中)
- パーティションとスループットのデータを使って根本原因を診断する
- グループごとの対処手順とともに調査結果を報告する
ステップ 1:コンシューマーグループを取得する
Lenses MCP の list_consumer_groups ツールを使い、次の情報を含むすべてのコンシューマーグループを取得します。
- グループの状態(Stable、Rebalancing、Empty、Dead)
- トピック・パーティションごとのラグ
- アクティブなメンバー数
- コーディネーター情報
特定のトピックを分析する場合は、list_consumer_groups_by_topic を使って対象を絞り込みます。
想定される出力:状態、ラグ、メンバー数を含むすべてのコンシューマーグループの一覧。
検証:コンシューマーグループが返されない場合は、その結果を報告して終了します。クラスターにアクティブなコンシューマーが存在しない可能性があります。
ステップ 2:問題のあるグループを特定する
次のカテゴリに該当するコンシューマーグループにフラグを付けます。
重大
- オフセットがコミットされているにもかかわらず、状態が Dead または Empty のグループ(コンシューマーが停止しています)
- 時間の経過とともにラグが増加しているグループ(
get_topic_partitionsを使って、現在のラグとパーティションの終了オフセットを比較します)
警告
- Rebalancing 状態のグループ(メッセージの消費が一時停止しています)
- パーティション割り当てに偏りがあるグループ(一部のコンシューマーに、他より大幅に多くのパーティションが割り当てられています)
- コミット済みオフセットがないグループ(コンシューマーが正常に起動したことがない可能性があります)
提案
- パーティション数に対してメンバー数が非常に多いグループ(アイドル状態のコンシューマーがいます)
- 最近メッセージのないトピックを消費しているグループ(
get_dataset_message_metricsを使ってプロデューサーのスループットを確認します)
ステップ 3:根本原因を診断する
問題のあるグループごとに、考えられる原因を特定します。
ラグが増加 + プロデューサーのレートが安定
- コンシューマーのスループットがボトルネックになっています
- 対処:コンシューマーをスケールし、
max.poll.recordsを増やし、メッセージあたりの処理時間を短縮し、同期的なブロッキング呼び出しがないか確認します
ラグの急増 + リバランス中
- リバランスによってメッセージの消費が一時停止しています
- 対処:協調的スティッキーアサイナーに切り替え、
session.timeout.msを増やし、max.poll.interval.msに関するリスクを軽減します
単一のパーティションでラグが発生(他は問題なし)
- ホットパーティションまたはキーの偏りです
- 対処:パーティショニング戦略を見直し、ホットキーを確認し、カスタムパーティショナーを検討します
すべてのパーティションで同程度のラグが発生
- コンシューマー全体の処理速度が低下しています
- 対処:コンシューマーの処理をプロファイリングし、外部依存関係(データベース、API 呼び出し)を確認し、コンシューマーインスタンスを増やします
ラグはゼロだがグループは Empty
- コンシューマーがクラッシュしたか、停止・削除されています
- 対処:コンシューマープロセスの正常性を確認し、必要に応じて再起動し、古いグループをクリーンアップします
ステップ 4:データフローを検証する
Lenses MCP の execute_sql ツールを使って、ラグが発生しているトピックから最近のメッセージをサンプリングします。
SELECT * FROM {topic} LIMIT 5
これにより、トピックにアクティブなプロデューサーが存在し、メッセージが流れていることを確認できます。
成功基準
定量的
- ラグに関するクエリの 90% でトリガーされる(表現を変えた 10~20 件でテスト)
- 12 回未満の MCP ツール呼び出しで分析を完了する
- 1 回の実行あたり MCP 呼び出しの失敗が 0 件
定性的
- フラグを付けた各グループに、具体的な診断結果と対処方法がある
- 症状と根本原因を区別したレポートになっている
- 同じ環境で再実行した場合に、一貫した結果が得られる
例
例 1:インシデント調査
ユーザーの発言:「コンシューマーの処理が遅れています。ラグを確認してください」
対応:
- 対象環境のすべてのコンシューマーグループを取得する
- 合計ラグの降順で並べ、最も問題の大きいグループを特定する
- 重大なグループごとに根本原因を診断する 結果:グループごとの診断と対処方法を含む、優先順位付きのレポート
例 2:トピック固有のラグ確認
ユーザーの発言:「orders.payment.completed のコンシューマーラグを確認してください」
アクション:
list_consumer_groups_by_topicを使用して、そのトピックを消費しているグループを取得します- パーティションレベルのラグ分布を確認します
execute_sqlでデータフローを検証します 結果:単一トピックのコンシューマーグループに焦点を当てたレポート
例 3:古いグループのクリーンアップ
ユーザーの発言:「停止または空のコンシューマーグループがないか確認してください」
アクション:
- すべてのコンシューマーグループを取得します
- コミット済みオフセットがあるグループのうち、Dead または Empty 状態のものを絞り込みます
- 安全にクリーンアップできる古いグループを報告します 結果:削除候補のグループ一覧
トラブルシューティング
コンシューマーグループの一覧が空です
原因:環境にコンシューマーグループが存在しないか、権限が制限されています。 解決策:コンシューマーが実行中であることを確認します。Lenses エージェントにコンシューマーグループの一覧表示権限があることを確認します。
ラグの数値が正しくないようです
原因:コンシューマーが最近停止した場合、コンシューマーグループのオフセットが古い可能性があります。
解決策:get_topic_partitions で取得したパーティションの終了オフセットとラグを比較します。オフセットが最後にコミットされた日時を確認します。
execute_sql がデータを返しません
原因:トピックが空か、クエリ対象の期間より古いメッセージしかありません。
解決策:get_dataset_message_metrics を使用して、トピックに最近のスループットがあるか確認します。ラグがあるコンシューマーがいるにもかかわらずトピックが空の場合は、プロデューサーに問題があることを示しています。
出力形式
## Consumer Lag Report
### Environment: {name}
### Critical (immediate action)
| Consumer Group | Topic | Total Lag | State | Diagnosis | Remediation |
|---------------|-------|-----------|-------|-----------|-------------|
| group-name | topic | 50000 | Stable | Throughput bottleneck | Scale consumers |
### Warning (investigate)
| Consumer Group | Topic | Total Lag | State | Diagnosis | Remediation |
|---------------|-------|-----------|-------|-----------|-------------|
### Suggestion (optimise)
| Consumer Group | Topic | Total Lag | State | Diagnosis | Remediation |
|---------------|-------|-----------|-------|-----------|-------------|
### Summary
- X consumer groups analysed
- Y groups with critical lag
- Z groups with warnings
- Stale/empty groups: N