

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# LinkedIn の Cruise Control for Apache Kafka を Amazon MSK で使用する
<a name="cruise-control"></a>

LinkedIn の Cruise Control を使用して、Amazon MSK クラスターのバランスを取り直し、異常を検出して修正し、クラスターの状態とヘルスをモニタリングできます。

**注記**  
新しく作成した Express ベースのクラスターで[インテリジェントリバラン](intelligent-rebalancing.md)シングが有効になっている場合、Cruise Control などのサードパーティー製ツールを使用してパーティションの再バランシングを行うことはできません。これらのサードパーティーツールが提供するパーティション再割り当て API を使用するには、まずインテリジェントな再調整を一時停止する必要があります。

**Cruise Control をダウンロードして構築するには**

1. Amazon MSK クラスターと同じ Amazon VPC に Amazon EC2 インスタンスを作成します。

1. 前のステップで作成した Amazon EC2 インスタンスに Prometheus をインストールします。プライベート IP とポートに注意してください。デフォルトのポート番号は 9090 です。クラスターのメトリクスを集約するように Prometheus を構成する方法については、「[Prometheus で MSK プロビジョンドクラスターをモニタリングする](open-monitoring.md)」を参照してください。

1. Amazon EC2 インスタンスに [Cruise Control](https://github.com/linkedin/cruise-control/releases) をダウンロードします。(または、必要に応じて、Cruise Control に別の Amazon EC2 インスタンスを使用することもできます。) Apache Kafka バージョン 2.4.\$1 を搭載したクラスターの場合は、最新の 2.4.\$1 Cruise Control リリースを使用してください。クラスターに 2.4.\$1 より古いバージョンの Apache Kafka がある場合は、最新の 2.0.\$1 Cruise Control リリースを使用してください。

1. Cruise Control ファイルを解凍してから、解凍したフォルダに移動します。

1. 次のコマンドを実行して git をインストールします。

   ```
   sudo yum -y install git
   ```

1. 次のコマンドを実行して、ローカルリポジトリを初期化します。*Your-Cruise-Control-Folder*を、現在のフォルダ (Cruise Control のダウンロードを解凍したときに取得したフォルダ) の名前に置き換えます。

   ```
   git init && git add . && git commit -m "Init local repo." && git tag -a Your-Cruise-Control-Folder -m "Init local version."
   ```

1. 次のコマンドを実行して、ソースコードを構築します。

   ```
   ./gradlew jar copyDependantLibs
   ```

**Cruise Control を設定して実行するには**

1. `config/cruisecontrol.properties` ファイルを次のように更新します。サンプルのブートストラップサーバーとブートストラップブローカーの文字列をクラスターの値に置き換えます。クラスターのこれらの文字列を取得するには、コンソールでクラスターの詳細を確認できます。または、[GetBootstrapBrokers](https://docs.aws.amazon.com//msk/1.0/apireference/clusters-clusterarn-bootstrap-brokers.html#GetBootstrapBrokers)および[DescribeCluster](https://docs.aws.amazon.com//msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster) API オペレーションまたは同等の CLI オペレーションを使用することもできます。

   ```
   # If using TLS encryption, use 9094; use 9092 if using plaintext
   bootstrap.servers=b-1.test-cluster.2skv42.c1.kafka.us-east-1.amazonaws.com:9094,b-2.test-cluster.2skv42.c1.kafka.us-east-1.amazonaws.com:9094,b-3.test-cluster.2skv42.c1.kafka.us-east-1.amazonaws.com:9094
       
   # SSL properties, needed if cluster is using TLS encryption
   security.protocol=SSL
   ssl.truststore.location=/home/ec2-user/kafka.client.truststore.jks
       
   # Use the Prometheus Metric Sampler
   metric.sampler.class=com.linkedin.kafka.cruisecontrol.monitor.sampling.prometheus.PrometheusMetricSampler
       
   # Prometheus Metric Sampler specific configuration
   prometheus.server.endpoint=1.2.3.4:9090 # Replace with your Prometheus IP and port
       
   # Change the capacity config file and specify its path; details below
   capacity.config.file=config/capacityCores.json
   ```

   エクスプレスブローカーの場合、[アナライザー設定](https://github.com/linkedin/cruise-control/wiki/Configurations#analyzer-configurations) で設定されたいずれの目標にも `DiskCapacityGoal`を使用しないことをお勧めします。

1. `config/capacityCores.json` ファイルを編集して、適切なディスクサイズ、CPU コア、およびネットワークの入出力制限を指定します。Express ブローカーの場合、`DISK`容量エントリは Cruise Control の設定にのみ必要です。MSK は Express ブローカーのすべてのストレージを管理するため、この値を `Integer.MAX_VALUE (2147483647)` などの非常に高い数値に設定する必要があります。標準 ブローカーの場合、[DescribeCluster](https://docs.aws.amazon.com//msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster) API オペレーション (または [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/describe-cluster.html) CLI) を使用してディスクサイズを取得できます。CPU コアとネットワークの入出力制限については、[Amazon EC2 インスタンスタイプ](https://aws.amazon.com/ec2/instance-types/)を参照してください。

------
#### [ Standard broker config/capacityCores.json ]

   ```
   {
     "brokerCapacities": [
       {
         "brokerId": "-1",
         "capacity": {
           "DISK": "10000",
           "CPU": {
             "num.cores": "2"
           },
           "NW_IN": "5000000",
           "NW_OUT": "5000000"
         },
         "doc": "This is the default capacity. Capacity unit used for disk is in MB, cpu is in number of cores, network throughput is in KB."
       }
     ]
   }
   ```

------
#### [ Express broker config/capacityCores.json ]

   ```
   {
     "brokerCapacities":[
       {
         "brokerId": "-1",
         "capacity": {
           "DISK": "2147483647",
           "CPU": {"num.cores": "16"},
           "NW_IN": "1073741824",
           "NW_OUT": "1073741824"
         },
         "doc": "This is the default capacity. Capacity unit used for disk is in MB, cpu is in number of cores, network throughput is in KB."
       }
     ]
   }
   ```

------

1. オプションで、Cruise Control UI をインストールできます。ダウンロードするには、[Cruise Control Frontend の設定](https://github.com/linkedin/cruise-control-ui/wiki/Single-Kafka-Cluster#setting-up-cruise-control-frontend)に移動します。

1. 次のコマンドを実行して、Cruise Control をスタートします。`screen` や `tmux` などのツールを使用して、長時間実行されるセッションを開いたままにすることを検討してください。

   ```
   <path-to-your-CRUISE-CONTROL-installation>/bin/kafka-cruise-control-start.sh config/cruisecontrol.properties 9091
   ```

1. Cruise Control API または UI を使用して、Cruise Control にクラスター ロードデータがあり、リバランスの提案が行われていることを確認します。メトリクスの有効なウィンドウを取得するには、数分かかる場合があります。
**重要**  
Express ブローカーは Zookeeper エンドポイントを公開しないため、Express ブローカーと互換性があるのは Cruise Control バージョン 2.5.60 以降のみです。

## Cruise Control for Amazon MSK の自動デプロイテンプレートを使用する
<a name="cruise-control-cfn-template"></a>

この [CloudFormation テンプレート](https://github.com/aws-samples/cruise-control-for-msk) を使用して、Cruise Control と Prometheus を簡単にデプロイし、Amazon MSK クラスターのパフォーマンスをより深く把握し、リソース使用率を最適化することもできます。

**主な特徴:**
+ Cruise Control と Prometheus が事前設定された Amazon EC2 インスタンスの自動プロビジョニング。
+ Amazon MSK プロビジョニング済みクラスターのサポート。
+ [PlainText と IAM](kafka_apis_iam.md) による柔軟な認証。
+ Cruise Control の ZooKeeper 依存関係はありません。
+ Amazon S3 バケットに保存されている独自の設定ファイルを指定することで、Prometheus ターゲット、Cruise Control 容量設定、およびその他の設定を簡単にカスタマイズできます。

## パーティションの再調整ガイドライン
<a name="cruise-control-partition-rebalancing"></a>

### Kafka パーティションの再割り当てに関するガイドライン
<a name="cruise-control-partition-reassignment"></a>

Kafka でのパーティションの再割り当ては、ブローカー間で大量のデータを転送し、ネットワークの集中化を引き起こし、クライアントオペレーションに影響を与える可能性があるため、リソースを大量に消費する可能性があります。以下のベストプラクティスは、スロットリングレートの調整、同時実行制御の活用、再割り当てタイプの理解により、クラスターオペレーションの中断を最小限に抑えることで、パーティションの再割り当てを効果的に管理するのに役立ちます。

**注記**  
新しく作成された Express ベースのクラスターがある場合は、クラスターをスケールアップまたはスケールダウンするときに、自動パーティション分散の[インテリジェントな再調整](intelligent-rebalancing.md)を使用します。

#### Cruise Control での同時実行の管理
<a name="cruise-control-managing-concurrency"></a>

Cruise Control には、パーティションとリーダーシップの動きの同時実行を制御する自動調整パラメータが用意されています。次のパラメータは、再割り当て中に許容可能な負荷を維持するのに役立ちます。
+ **最大同時パーティション移動数**: ブローカー間の同時パーティション移動を制限し、過剰なネットワーク使用率を回避するように `num.concurrent.partition.movements.per.broker` を定義します。  
**Example 例**  

  ```
  num.concurrent.partition.movements.per.broker = 5
  ```

  この設定では、各ブローカーが一度に 10 個以下のパーティションを移動するように制限し、ブローカー間で負荷を分散します。

#### スロットリングを使用して帯域幅を制御する
<a name="cruise-control-control-bandwidth"></a>
+ **スロットリングパラメータ**: `kafka-reassign-partitions.sh` でパーティションの再割り当てを実行する場合、`--throttle parameter` を使用して、ブローカー間のデータ移動の最大転送速度 (バイト/秒) を設定します。  
**Example 例**  

  ```
  --throttle 5000000
  ```

  これにより、最大帯域幅が 5 MB/秒に設定されます。
+ **バランススロットリング設定**: 適切なスロットリングレートを選択することが重要です。

  設定が低すぎると、再割り当てにかなり時間がかかる場合があります。

  設定が高すぎると、クライアントでレイテンシーが増加する可能性があります。
+ 保守的なスロットルレートから開始し、クラスターのパフォーマンスモニタリングに基づいて調整します。本番環境に適用する前に、選択したスロットルをテストして最適なバランスを見つけます。

#### ステージング環境でのテストと検証
<a name="cruise-control-partition-rebalancing-test"></a>

本番環境に再割り当てを実装する前に、同様の設定のステージング環境で負荷テストを実行します。これにより、パラメータを微調整し、本番環境での予期しない影響を最小限に抑えることができます。