コンシューマーラグの増加

コンシューマーラグは、重要なパフォーマンスの指標です。これにより、プロデューサーが最後に生成したメッセージと、コンシューマーグループの最後のコミットとのオフセットの差分がわかります。コンシューマーグループや、オフセットのコミットなどの概念について不明な点がある場合は、Kafka コンシューマーのドキュメント を参照してください。

コンシューマーラグが大きい場合や急激に増加している場合、トピックのメッセージ量にコンシューマーが対応しきれていないことを示しています。

このシナリオでは、さまざまなソースからのメトリクスを確認します。コンシューマーラグのメトリクスは kafka-lag-exporter コンテナーから取得されます。これは Scala のオープンソースプロジェクトで、コンシューマーグループに関するデータを収集し、Prometheus でスクレイピング可能なフォーマットでデータを表現します。Confluent Cloud クラスターリソースの使用状況に関するメトリクスは、Metrics API エンドポイントから取得されます。コンシューマークライアントのメトリクスは、クライアントアプリケーションの MBean オブジェクト kafka.consumer:type=consumer-fetch-manager-metrics,client-id=<client_id> から取得されます。

障害のシナリオの導入

  1. デフォルトではコンシューマー 1 つとプロデューサー 1 つが実行されます。これを、生成されるメッセージのスピードにコンシューマーが追い付けなくなるように、コンシューマー 1 つとプロデューサー 5 つに変更します。これにより、コンシューマーラグが大きくなります。コンテナのスケーリングを行うには、次のコマンドを使用します。

    docker-compose up -d --scale producer=5
    

    このコマンドの出力は次のようになります。

    ccloud-exporter is up-to-date
    kafka-lag-exporter is up-to-date
    node-exporter is up-to-date
    grafana is up-to-date
    prometheus is up-to-date
    Starting ccloud-observability_producer_1              ... done
    Creating ccloud-observability_producer_2              ... done
    Creating ccloud-observability_producer_3              ... done
    Creating ccloud-observability_producer_4              ... done
    Creating ccloud-observability_producer_5              ... done
    Starting ccloud-observability_consumer_1              ... done
    

問題の診断

  1. Grafana を開き、ユーザー名 admin とパスワード password を使用してログインします。

  2. Consumer Client Metrics ダッシュボードに移動します。2 分待ってから、以下の点を観察します。

    • Consumer group lag in records の上昇傾向。Consumer group lag in seconds の増加が劇的ではなくなります。どちらも、コンシューマーが適切なタイミングでフェッチできないほど多くのメッセージをプロデューサーが生成していることを示しています。これらのメトリクスは kafka-lag-exporter コンテナーから取得されています。

    コンシューマーラグ

    • Consumer Fetch Metrics タブの Fetch request ratefetch-total)および Fetch size avgfetch-size-avg)の増加。これは、コンシューマーが高い頻度で大きなバッチをフェッチしていることを示します。

    コンシューマーのフェッチの増加

    • Throughput のすべてのグラフが、コンシューマーが処理するバイト数/レコード数の増加を示していること。

    コンシューマーのスループットの増加

    注釈

    クライアントが 適切に調整されていて、十分なリソースがある場合、スループットのメトリクスまたはフェッチのメトリクスの増加は、必ずしもコンシューマーラグが増加することを意味しません。

  3. Confluent Cloud には、コンシューマーラグの別のビューもあります。Confluent Cloud Console を開き、"Consumers" セクションに移動して、demo-cloud-observability-1 コンシューマーグループをクリックします。このページは定期的に更新され、2 分以内に、オフセットラグが着実に増加していることを確認できます。

    Confluent Cloud のコンシューマーラグ

    これは特定時点のスナップショットですが、Consumer Client Metrics ダッシュボードのように履歴を確認することはできません。

  4. Confluent Platform がインストールされている場合、現在のコンシューマーラグは、CLI を使用して確認することもできます。

    kafka-consumer-groups --bootstrap-server $BOOTSTRAP_SERVERS --command-config $CONFIG_FILE --describe --group demo-cloud-observability-1
    

    このコマンドの出力は、たとえば次のようになります。

    GROUP                   TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                                                             HOST            CLIENT-ID
    demo-cloud-observability-1 demo-topic-1    0          48163           48221           58              consumer-demo-cloud-observability-1-1-b0bec0b5-ec84-4233-9d3e-09d132b9a3c7 /10.2.10.251    consumer-demo-cloud-observability-1-1
    demo-cloud-observability-1 demo-topic-1    3          91212           91278           66              consumer-demo-cloud-observability-1-1-b0bec0b5-ec84-4233-9d3e-09d132b9a3c7 /10.2.10.251    consumer-demo-cloud-observability-1-1
    demo-cloud-observability-1 demo-topic-1    4          47854           47893           39              consumer-demo-cloud-observability-1-1-b0bec0b5-ec84-4233-9d3e-09d132b9a3c7 /10.2.10.251    consumer-demo-cloud-observability-1-1
    demo-cloud-observability-1 demo-topic-1    5          47748           47803           55              consumer-demo-cloud-observability-1-1-b0bec0b5-ec84-4233-9d3e-09d132b9a3c7 /10.2.10.251    consumer-demo-cloud-observability-1-1
    demo-cloud-observability-1 demo-topic-1    1          48097           48151           54              consumer-demo-cloud-observability-1-1-b0bec0b5-ec84-4233-9d3e-09d132b9a3c7 /10.2.10.251    consumer-demo-cloud-observability-1-1
    demo-cloud-observability-1 demo-topic-1    2          48310           48370           60              consumer-demo-cloud-observability-1-1-b0bec0b5-ec84-4233-9d3e-09d132b9a3c7 /10.2.10.251    consumer-demo-cloud-observability-1-1
    

    ここでも、この表示の欠点は、Consumer Client Metrics ダッシュボードのように履歴的な文脈を確認できないことです。

  5. 生成されるバイト数と消費されるバイト数の増加が反映される、Confluent Cloud クラスターのトップレベルビューは、以下の Confluent Cloud ダッシュボードの強調表示されたパネルで確認できます。

    Confluent Cloud のリクエストの増加

  6. コンシューマーログでは、コンシューマーが後れていることがわかりません。そのため、コンシューマーラグに対応する堅牢なモニタリングソリューションの存在が重要です。

障害のシナリオの解決

  1. consumer-1 コンテナーを起動して、コンシューマーグループにコンテナを 1 つ追加し直し、余分なプロデューサーを停止します。

    docker-compose up -d --scale producer=1
    

    このコマンドの出力は次のようになります。

    node-exporter is up-to-date
    grafana is up-to-date
    kafka-lag-exporter is up-to-date
    prometheus is up-to-date
    ccloud-exporter is up-to-date
    Stopping and removing ccloud-observability_producer_2 ... done
    Stopping and removing ccloud-observability_producer_3 ... done
    Stopping and removing ccloud-observability_producer_4 ... done
    Stopping and removing ccloud-observability_producer_5 ... done
    Starting ccloud-observability_consumer_1              ... done
    Starting ccloud-observability_producer_1              ... done