

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Usa LinkedIn il Cruise Control per Apache Kafka con Amazon MSK
<a name="cruise-control"></a>

Puoi utilizzare LinkedIn Cruise Control per ribilanciare il cluster Amazon MSK, rilevare e correggere anomalie e monitorare lo stato e l'integrità del cluster.

**Nota**  
Se il [ribilanciamento intelligente](intelligent-rebalancing.md) è attivato per i cluster basati su Express appena creati, non potrai utilizzare strumenti di terze parti, come Cruise Control, per il ribilanciamento delle partizioni. Devi prima mettere in pausa il ribilanciamento intelligente per utilizzare l'API di riassegnazione delle partizioni fornita da questi strumenti di terze parti.

**Download e compilazione di Cruise Control**

1. Crea un'istanza Amazon EC2 nello stesso Amazon VPC del cluster Amazon MSK.

1. Installa Prometheus sull'istanza Amazon EC2 che hai creato nel passaggio precedente. Prendi nota dell'IP privato e della porta. Il numero di porta predefinito è 9090. Per informazioni su come configurare Prometheus per aggregare i parametri per un cluster, consulta la pagina [Monitora un cluster MSK Provisioned con Prometheus](open-monitoring.md).

1. Scarica [Cruise Control](https://github.com/linkedin/cruise-control/releases) sull'istanza Amazon EC2. In alternativa, se preferisci, puoi utilizzare un'istanza Amazon EC2 separata per Cruise Control. Per un cluster con Apache Kafka versione 2.4.\$1, usa la versione 2.4.\$1 di Cruise Control più recente. Se il tuo cluster ha una versione di Apache Kafka precedente alla 2.4.\$1, utilizza la versione 2.0.\$1 di Cruise Control più recente.

1. Decomprimi il file Cruise Control, quindi vai alla cartella decompressa.

1. Esegui il comando seguente per installare git.

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

1. Esegui il comando seguente per inizializzare il repository locale. *Your-Cruise-Control-Folder*Sostituiscila con il nome della cartella attuale (la cartella che hai ottenuto quando hai decompresso il download di Cruise Control).

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

1. Esegui il comando seguente per creare il codice sorgente.

   ```
   ./gradlew jar copyDependantLibs
   ```

**Configurazione ed esecuzione di Cruise Control**

1. Apporta le seguenti modifiche al file `config/cruisecontrol.properties`. Sostituisci la stringa bootstrap servers e bootstrap-brokers di esempio con i valori del tuo cluster. Per recuperare queste stringhe per il cluster, puoi consultare i dettagli del cluster nella console. In alternativa, puoi utilizzare le operazioni [GetBootstrapBrokers](https://docs.aws.amazon.com//msk/1.0/apireference/clusters-clusterarn-bootstrap-brokers.html#GetBootstrapBrokers)e [DescribeCluster](https://docs.aws.amazon.com//msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster)API o i loro equivalenti 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
   ```

   [Per i broker express, consigliamo di non utilizzarlo `DiskCapacityGoal` in nessuno degli obiettivi configurati nelle configurazioni degli analizzatori.](https://github.com/linkedin/cruise-control/wiki/Configurations#analyzer-configurations)

1. Modifica il `config/capacityCores.json` file per specificare la dimensione del disco, i core della CPU e i limiti di rete corretti. in/out Per i broker Express, l'inserimento della `DISK` capacità è necessario solo per configurare Cruise Control. Poiché MSK gestisce tutto lo spazio di archiviazione per i broker Express, è necessario impostare questo valore su un numero estremamente alto, ad esempio. `Integer.MAX_VALUE (2147483647)` Per i broker Standard, è possibile utilizzare l'operazione [DescribeCluster](https://docs.aws.amazon.com//msk/1.0/apireference/clusters-clusterarn.html#DescribeCluster)API (o [describe-cluster](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kafka/describe-cluster.html) CLI) per ottenere la dimensione del disco. Per i core della CPU e i in/out limiti di rete, consulta Tipi di istanze di [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. Facoltativamente, puoi installare l'interfaccia utente di Cruise Control. Per scaricarla, consulta la pagina [Setting Up Cruise Control Frontend](https://github.com/linkedin/cruise-control-ui/wiki/Single-Kafka-Cluster#setting-up-cruise-control-frontend).

1. Esegui il comando seguente per avviar Cruise Control. Prendi in considerazione l'utilizzo di uno strumento come `screen` o `tmux` per mantenere aperta una sessione di lunga durata.

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

1. Usa Cruise Control APIs o l'interfaccia utente per assicurarti che Cruise Control disponga dei dati di carico del cluster e che fornisca suggerimenti per il ribilanciamento. Potrebbero trascorrere alcuni minuti prima di ottenere una finestra di parametri valida.
**Importante**  
Solo le versioni di Cruise Control 2.5.60 e successive sono compatibili con i broker Express, poiché i broker Express non espongono gli endpoint Zookeeper.

## Usa il modello di distribuzione automatizzata di Cruise Control per Amazon MSK
<a name="cruise-control-cfn-template"></a>

Puoi anche utilizzare questo [CloudFormation modello](https://github.com/aws-samples/cruise-control-for-msk) per implementare facilmente Cruise Control e Prometheus per ottenere informazioni più approfondite sulle prestazioni del tuo cluster Amazon MSK e ottimizzare l'utilizzo delle risorse.

**Caratteristiche principali:**
+ Provisioning automatico di un'istanza Amazon EC2 con Cruise Control e Prometheus preconfigurati.
+ Support per il cluster con provisioning di Amazon MSK.
+ Autenticazione flessibile con [PlainText e](kafka_apis_iam.md) IAM.
+ Nessuna dipendenza da Zookeeper per Cruise Control.
+ Personalizza facilmente gli obiettivi Prometheus, le impostazioni della capacità del Cruise Control e altre configurazioni fornendo i tuoi file di configurazione memorizzati in un bucket Amazon S3.

## Linee guida per il ribilanciamento delle partizioni
<a name="cruise-control-partition-rebalancing"></a>

### Linee guida per la riassegnazione delle partizioni Kafka
<a name="cruise-control-partition-reassignment"></a>

La riassegnazione delle partizioni in Kafka può richiedere molte risorse, in quanto comporta il trasferimento di dati significativi tra broker, causando potenzialmente la congestione della rete e influendo sulle operazioni dei client. Le seguenti best practice consentono di gestire in modo efficace la riassegnazione delle partizioni ottimizzando i tassi di accelerazione, sfruttando i controlli di concorrenza e comprendendo i tipi di riassegnazione per ridurre al minimo le interruzioni delle operazioni del cluster.

**Nota**  
Se disponi di un cluster basato su Express appena creato, utilizza il [ribilanciamento intelligente](intelligent-rebalancing.md) per la distribuzione automatica delle partizioni man mano che aumenti o riduci i cluster.

#### Gestione della concorrenza in Cruise Control
<a name="cruise-control-managing-concurrency"></a>

Il Cruise Control fornisce parametri di regolazione automatica per controllare la concomitanza dei movimenti di partizione e di leadership. I seguenti parametri aiutano a mantenere un carico accettabile durante le riassegnazioni:
+ Movimenti di **partizione simultanei massimi: definisci il limite massimo `num.concurrent.partition.movements.per.broker` per i movimenti** simultanei delle partizioni tra broker, evitando un utilizzo eccessivo della rete.  
**Example Esempio**  

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

  Questa impostazione limita ogni broker a spostare non più di 10 partizioni alla volta, bilanciando il carico tra i broker.

#### Usa la limitazione per controllare la larghezza di banda
<a name="cruise-control-control-bandwidth"></a>
+ **Parametro Throttle**: quando si esegue la riassegnazione delle partizioni con`kafka-reassign-partitions.sh`, utilizzare `--throttle parameter` per impostare una velocità di trasferimento massima (in byte al secondo) per lo spostamento dei dati tra i broker.  
**Example Esempio**  

  ```
  --throttle 5000000
  ```

  Questo imposta una larghezza di banda massima di 5 MB/s.
+ **Balance Throttle Settings**: La scelta di una frequenza di accelerazione appropriata è fondamentale:

  Se impostato su un valore troppo basso, la riassegnazione potrebbe richiedere molto più tempo.

  Se impostato su un valore troppo alto, i client potrebbero riscontrare un aumento della latenza.
+ Inizia con una frequenza di accelerazione conservativa e regola in base al monitoraggio delle prestazioni del cluster. Testa l'acceleratore che hai scelto prima di passare a un ambiente di produzione per trovare l'equilibrio ottimale.

#### Esegui test e convalida in un ambiente di staging
<a name="cruise-control-partition-rebalancing-test"></a>

Prima di implementare le riassegnazioni in produzione, esegui test di carico in un ambiente di staging con configurazioni simili. Ciò consente di ottimizzare i parametri e ridurre al minimo gli impatti imprevisti nella produzione live.