コンシューマーラグの増加¶
コンシューマーラグは、重要なパフォーマンスの指標です。これにより、プロデューサーが最後に生成したメッセージと、コンシューマーグループの最後のコミットとのオフセットの差分がわかります。コンシューマーグループや、オフセットのコミットなどの概念について不明な点がある場合は、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 つとプロデューサー 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
問題の診断¶
Grafana を開き、ユーザー名
admin
とパスワードpassword
を使用してログインします。Consumer Client Metrics
ダッシュボードに移動します。2 分待ってから、以下の点を観察します。Consumer group lag in records
の上昇傾向。Consumer group lag in seconds
の増加が劇的ではなくなります。どちらも、コンシューマーが適切なタイミングでフェッチできないほど多くのメッセージをプロデューサーが生成していることを示しています。これらのメトリクスはkafka-lag-exporter
コンテナーから取得されています。
Consumer Fetch Metrics
タブのFetch request rate
(fetch-total
)およびFetch size avg
(fetch-size-avg
)の増加。これは、コンシューマーが高い頻度で大きなバッチをフェッチしていることを示します。
Throughput
のすべてのグラフが、コンシューマーが処理するバイト数/レコード数の増加を示していること。
注釈
クライアントが 適切に調整されていて、十分なリソースがある場合、スループットのメトリクスまたはフェッチのメトリクスの増加は、必ずしもコンシューマーラグが増加することを意味しません。
Confluent Cloud には、コンシューマーラグの別のビューもあります。UI を開き、"Consumers" セクションに移動して、
demo-cloud-observability-1
コンシューマーグループをクリックします。このページは定期的に更新され、2 分以内に、オフセットラグが着実に増加していることを確認できます。これは特定時点のスナップショットですが、
Consumer Client Metrics
ダッシュボードのように履歴を確認することはできません。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
ダッシュボードのように履歴的な文脈を確認できないことです。生成されるバイト数と消費されるバイト数の増加が反映される、Confluent Cloud クラスターのトップレベルビューは、以下の
Confluent Cloud
ダッシュボードの強調表示されたパネルで確認できます。コンシューマーログでは、コンシューマーが後れていることがわかりません。そのため、コンシューマーラグに対応する堅牢なモニタリングソリューションの存在が重要です。
障害のシナリオの解決¶
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