Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
Amazon MSK クラスターの 1 つ以上のブローカーの CPU 使用率が高い場合のトラブルシューティング方法を教えてください。
Amazon Managed Streaming for Apache Kafka (Amazon MSK) クラスター内の 1 つ以上のブローカーの CPU 使用率が高いことをトラブルシューティングしたいと考えています。
解決策
Amazon MSK クラスターの合計 CPU 使用率は、以下の合計として計算されます。
- CpuUser というメトリックで定義されるユーザースペースにおける CPU の割合
- CpuSystem によって定義されるカーネルスペース内の CPU の割合
クラスターの CPU の 40% が使用できるように、CPU の合計使用率を 60% 未満に抑えることがベストプラクティスです。Apache Kafka は、必要に応じてクラスター内のブローカー間で CPU 負荷を再分散できます。たとえば、ブローカーの障害が発生した場合、Amazon MSK は利用可能な CPU を使用してパッチなどの自動メンテナンスを実行できます。
Amazon MSK クラスターの CPU 使用率が高いのは、以下のいずれかの理由が考えられます。
- 送受信トラフィックが多い。
- ブローカーあたりのパーティション数を超過すると、クラスターが過負荷になる。
- T インスタンスタイプを使用している。
送受信トラフィックが多い
クラスターへの送受信トラフィックをモニタリングするには、Amazon CloudWatch メトリクスの BytesInPerSec と BytesOutPerSec メトリクスを使用します。ブローカーのこれらのメトリクスの値が高いか、偏っている場合は、ブローカーの CPU 使用率が高い可能性があります。
ボリュームの大きいトピックのパーティション分散が不均一な場合、ブローカーのトラフィックが高くなることがあります。または、プロデューサがデータをすべてのパーティションに均等に分散しません。この問題を解決するには、プロデューサーパーティションキーを確認し、クラスター構成を更新してください。次に、あるパーティションが他のパーティションよりも多くのデータを取得しないようにパーティションキーを設定します。
また、コンシューマーグループがオフセットを頻繁にコミットすると、トラフィック量が多くなる可能性があります。オフセットコミットからのトラフィックはブローカーに影響します。この問題を解決するには、コンシューマーグループの数を減らすか、使用されているインスタンスのサイズをアップグレードしてください。
ブローカーあたりのパーティション数が推奨値を超えている
ブローカーあたりのパーティション数が推奨値を超えると、クラスターが過負荷になります。クラスターが過負荷になると、次のアクションを実行できなくなります。
- クラスター構成の更新。
- クラスターの Apache Kafka バージョンの更新。
- クラスターをより小さいブローカータイプに更新すること。
- AWS Secrets Manager のシークレットを SASL/SCRAM 認証のあるクラスターに関連付けること。
パーティションが多すぎると、CPU 使用率が高くなり、パフォーマンスが低下する可能性があります。
この問題を解決するには、次の手順を実行します。
- 古いトピックや未使用のトピックを削除して、パーティション数を推奨制限内に収めてください。未使用のトピックを特定するには、トピックレベルのモニタリングを有効にし、トピックレベルで BytesInPerSec と BytesOutPerSec のメトリクスを確認して、トピックにトラフィックが流れているかどうかを確認します。流れるトラフィックがない場合は、その未使用のトピックを削除できます。
- ブローカーのインスタンスタイプを、必要なパーティションの数に対応できるタイプにスケールアップします。また、ブローカーをさらに追加し、パーティションを再割り当てしてください。
注: パーティションを再割り当てするには、kafka-reassign-partitions コマンドを実行する必要があります。Amazon MSK は、ブローカーを追加しても自動的にパーティションを再割り当てしません。
T インスタンスタイプを使用している
T インスタンスタイプは、いくつかのバースト可能な機能を備えたベースラインのパフォーマンスを備えています。これらのインスタンスでは、20% の CPU 使用率というベースラインパフォーマンスを実現できます。この値を超えると、インスタンスタイプは CPU クレジットの使用を開始します。使用率が 20% 未満の場合、CPU クレジットが蓄積されます。
Amazon CloudWatch のバースト可能なインスタンスの CPU クレジットバランスメトリクスを必ずモニタリングしてください。
T インスタンスタイプで実行されるすべてのクラスターのベースライン CPU 使用率とクレジットバランスをモニタリングします。CPU 使用率がベースラインを超えていて、使用できるクレジットがこれ以上残っていない場合、クラスターのパフォーマンスに問題が生じます。
その他の考えられる原因
クライアントへの接続数が多い
次の CloudWatch メトリクスのいずれかが急増すると、ブローカー CPU 使用率が増加する可能性があります。
- ConnectionCount
- ConnectionCreationRate
- ConnectionCloseRate
この問題をトラブルシューティングするには、CloudWatch でこれらのメトリクスをモニタリングしてください。次に、必要に応じて接続数を減らすか、ブローカータイプをスケールアップします。
Amazon MSK はブローカーの障害を検出し、そこから回復する場合
Amazon MSK がブローカーの障害を検出し、パッチなどの自動メンテナンス操作を実行すると、CPU 使用率が増加します。Amazon MSK がクラスター操作を完了するとすぐに、CPU 使用率は通常の使用レベルに低下します。
ユーザーがブローカータイプの変更またはバージョンアップグレードを要求した
ユーザーがブローカリータイプの変更またはバージョンアップグレードを要求すると、Amazon MSK は一度に 1 つのブローカーをオフラインにするローリングワークフローをデプロイします。リードパーティションのあるブローカーがオフラインになると、Apache Kafka はパーティションリーダーを再割り当てして、クラスター内の他のブローカーに作業を再分配します。これらのブローカーの CPU 使用率をモニタリングし、運用上のイベントに耐えられる十分な CPU ヘッドルームがクラスターにあることを確認してください。
データ分散が偏っているため、1 つ以上のブローカーの CPU 使用率が高くなっている
データ分散が偏っているため、1 つ以上のブローカーの CPU 使用率が高くなっている可能性があります。たとえば、6 つのブローカーのうち 2 つのブローカーに書き込みを行い、それらのブローカーの消費量が最も多い場合、その CPU 使用率が高くなります。この問題に対処するには、クラスター全体にパーティションが適切に分散されるように、必ずラウンドロビン方式を使用してください。
Apache Kafka クラスターコントローラーがクラスター全体にパーティションを分散する方法を確認するには、次のコマンドを実行します。
bin/kafka-topics.sh -bootstrap-server $MYBROKERS --describe --topic my-topic
出力例:
Topic:my-topic PartitionCount:7 ReplicationFactor:3 Configs: Topic: my-topic Partition: 0 Leader: 1 Replicas: 1,3,2 Isr: 1,3,2 Topic: my-topic Partition: 1 Leader: 2 Replicas: 2,1,3 Isr: 2,1,3 Topic: my-topic Partition: 2 Leader: 3 Replicas: 3,2,1 Isr: 3,2,1 Topic: my-topic Partition: 3 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Topic: my-topic Partition: 4 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1 Topic: my-topic Partition: 5 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
オープンモニタリングを有効にした
Prometheus でオープンモニタリングをオンにしていて、スクレイプ間隔が短い場合、生成されるメトリクスの数が多くなり、CPU 使用率が増加する可能性があります。この問題を解決するには、スクレイプ間隔を長くしてください。Amazon MSK クラスターのパフォーマンスを維持するために、1 ブローカー・1 分あたり 1 スクレイプを超えないことがベストプラクティスです。デフォルトでは、スクレイプ間隔は 10〜15 秒ごとに発生します。
