Kafka は高スループットと耐障害性が魅力ですが、正しく監視しないと性能劣化やデータ喪失リスクに気づけません。本稿では、ブローカとクライアントの主要メトリクス、読み解き方、しきい値設計の勘所をまとめます。
内容は Apache Kafka/Confluent ドキュメントに基づく安定概念を中心にし、バージョン差異に依存しにくい指標を選んでいます。試験(CCAAK)で問われやすいポイントも明示します。
Kafka ブローカは JMX を通じてメトリクスを公開します。一般的には JMX Exporter(Java Agent)で HTTP エンドポイントに変換し、Prometheus が収集、Grafana で可視化、Alertmanager で通知します。Confluent 環境では Control Center や Metrics API(Confluent Cloud)も利用できます。
収集経路と責務を分離し、メトリクスの鮮度(スクレイプ間隔)と粒度(平均/分位点)を用途別に設計します。レイテンシは高頻度、容量系は低頻度で十分、というのが実務の定石です。
Kafka メトリクス収集の典型フロー
JMX Exporter + Prometheus 設定例(抜粋)
# Kafka ブローカの起動オプション例(systemd など)
# JMX Exporter を Java Agent として有効化
Environment="KAFKA_OPTS=-javaagent:/opt/jmx/jmx_prometheus_javaagent.jar=7071:/opt/jmx/kafka.yml"
# Prometheus の scrape 設定例
scrape_configs:
- job_name: 'kafka-brokers'
scrape_interval: 15s
static_configs:
- targets: ['broker-1:7071','broker-2:7071','broker-3:7071']
relabel_configs:
- source_labels: [__address__]
regex: '([^:]+):.*'
target_label: instance
replacement: '$1'まず押さえるのは可用性・整合性に直結するメトリクスです。UnderReplicatedPartitions(URP)、OfflinePartitionsCount、ActiveControllerCount はアラート一次指標として定番です。スループット系(BytesIn/Out、MessagesIn)は容量計画とボトルネック推定に使います。
要求遅延は単一メトリクスではなく、キュー待ち・ネットワーク・ディスク I/O などの合成です。RequestMetrics をリクエスト種別(Produce/Fetch/FetchConsumer)ごとに見るのが試験・実務の双方での正解パターンです。
| メトリクス | 意味 | 健全値の目安 | 要アラートの条件例 |
|---|---|---|---|
| UnderReplicatedPartitions | ISR から外れたパーティション数 | 常に 0 | 連続して > 0(例: 1分以上) |
| ActiveControllerCount | アクティブコントローラ数 | 常に 1 | != 1 |
| OfflinePartitionsCount | オフラインなパーティション数 | 常に 0 | >= 1 |
| Request TotalTimeMs p95 (Produce) | プロデュース要求の総遅延 | ワークロード依存(例: < 50–100ms) | 平常時比で 2–3倍超が継続 |
| BytesInPerSec/BytesOutPerSec | 入出力スループット | 容量計画の基準値 | 増減率が急峻(例: 5分で±50%) |
Kafka の RequestMetrics では TotalTimeMs を QueueTimeMs、LocalTimeMs、RemoteTimeMs、ResponseQueueTimeMs などに分割して観測できます。Queue が伸びるならスレッド不足や GC、Local が伸びるならディスク I/O、Remote が伸びるならネットワークと解釈できます。
分位点(p95/p99)でアラート候補を作り、平均はダッシュボード参照程度に留めるのが無難です。Produce と Fetch(特に consumer 向けの FetchConsumer)は分けて見るのが試験でも現場でも鉄則です。
コンシューマラグは各パーティションの Log End Offset と Consumer Group の Committed Offset の差分です。瞬間的なスパイクは正常でも、解消トレンドがない継続ラグは要対応です。auto.commit.interval.ms、max.poll.interval.ms、max.poll.records などの設定が挙動に直結します。
試験(CCAAK)では、lag の解釈ミス(バッチ処理で一時的に膨らむ、コミット遅延で見かけが増える等)を問う設問が定番です。ツールでは kafka-consumer-groups を使い、Group/Member/Partition 単位で把握します。
kafka-consumer-groups でのラグ確認(例)
# 代表的なコマンド
$ kafka-consumer-groups --bootstrap-server broker-1:9092 \
--group analytics-app --describe
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
analytics-app events 0 128345 128400 55 consumer-1-... /10.0.0.21 analytics-1
analytics-app events 1 127998 128001 3 consumer-2-... /10.0.0.22 analytics-2
# 解釈のコツ
# - LAG が波打ちながらも平均的に収束 → 正常範囲
# - LAG が累積的に増える/固定化 → スループット不足 or 停滞ディスク I/O とレプリケーション挙動は遅延と可用性に直結します。LogFlushRateAndTimeMs、Produce/FetchRequestPurgatorySize、IsrShrinksPerSec/IsrExpandsPerSec は安定運用の鍵です。URP が出なくても、IsrShrinks が増える兆候は早めに拾います。
また、パーティション過多はオープンファイル数やメタデータ処理コストを押し上げます。PartitionCount、LeaderCount を定期観測し、無秩序なトピック/パーティション増加を防ぎます。
アラートは「可用性一次指標」「性能劣化の先行指標」「容量逼迫の傾向」の3層に分けて設計します。一次指標は即時通知、先行指標は連続条件とヒステリシス、容量は予兆検知(傾き監視)がおすすめです。
試験対策では、URP/ActiveController/OfflinePartitions の意味と通常値、RequestMetrics の分解、Lag の正しい読み方、そして Confluent 系ツールでの可視化が頻出です。実務では平常時ベースラインを取り、相対変化率でのアラートも併用すると誤検知が減ります。
CCAAK
問題 1
Kafka クラスタの可用性リスクを最も直接的に示す一次指標として、継続監視すべきメトリクスはどれですか?
正解: A
URP はレプリカが ISR から外れ、耐障害性が低下している状態を直接示します。BytesIn の減少や CPU 高止まりは間接要因であり、LeaderElection の遅延は重要ですが恒常的ではありません。一次指標としては URP が最優先です。
Prometheus がなくても監視できますか?
はい。Kafka は JMX を公開しているため、JConsole や Jolokia などで取得可能です。Confluent 環境なら Control Center、Confluent Cloud なら Metrics API で主要指標を可視化できます。とはいえ、長期保管とアラート設計の容易さから Prometheus 系が一般的です。
しきい値に万能の数値はありますか?
ありません。ワークロードによる差が大きいため、平常時のベースラインと分位点を取り、相対変化率(例: 平常時 p95 の 2–3倍が一定時間継続)で設計するのが実務的です。URP=0、ActiveController=1、OfflinePartitions=0 は例外的に一律目安です。
Lag が 0 でも処理が遅いのはなぜですか?
バッチコミットや処理時間の偏りで、オフセットは進むがアプリ内部処理が詰まる場合があります。max.poll.records が小さすぎる、シリアライザ/外部 API 待ちが長い、コミットを非同期にしていて見かけが改善される等の要因が考えられます。アプリ内処理時間やスループットも併せて計測してください。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Kafka Topic と Partition の基礎: 分散とスケーラビリティの要
CCDAK 対策と実務の両立を意識し、Topic/Partition/Replica/Consumer Group の役...
CCDAK 試験ガイド:出題範囲・配点・申込み・対策
Confluent Certified Developer for Apache Kafka (CCDAK) の出題範囲...
Confluent Certified Administrator (CCAAK) 対策: 出題範囲・配点の考え方・運用観点の要点
CCAAKに向けて、試験領域の押さえどころを運用目線で整理。プロダクションで通用する設定・監視・セキュリティの実践知を、...
Kafka の Replica と In-Sync Replicas を正しく設計する: 耐障害性と一貫性
レプリカとISRの仕組みを起点に、acks と min.insync.replicas、クリーン/アンクリーンリーダー選...
Kafka の Offset とコミット: ポジション管理と at-least-once の基礎
CCDAK 対策と実務の両立を意識して、Kafka コンシューマのオフセット管理とコミット戦略を整理。at-least-...