Salta al contenuto

Come posso risolvere i problemi di utilizzo elevato della CPU da parte di uno o più broker in un cluster Amazon MSK?

6 minuti di lettura
0

Desidero risolvere i problemi di utilizzo elevato della CPU da parte di uno o più broker nel mio cluster Streaming gestito da Amazon per Apache Kafka (Amazon MSK).

Risoluzione

L'utilizzo totale della CPU per un cluster Amazon MSK è la somma dei seguenti valori:

  • Percentuale di CPU nello spazio utente definita dalla metrica CpuUser
  • Percentuale di CPU nello spazio del kernel definita dalla metrica CpuSystem

È consigliabile mantenere l'utilizzo totale della CPU al di sotto del 60% in modo che il 40% della CPU del cluster sia disponibile. Apache Kafka può ridistribuire il carico della CPU tra i broker del cluster in base alle esigenze. Ad esempio, quando si verifica l'errore di un broker, Amazon MSK può utilizzare la CPU disponibile per eseguire la manutenzione automatica, come l'applicazione delle patch.

Il cluster Amazon MSK potrebbe riscontrare un utilizzo elevato della CPU per uno dei seguenti motivi:

  • Traffico in entrata o in uscita elevato.
  • Numero di partizioni per broker superiore al valore consigliato e conseguente sovraccarico del cluster.
  • Utilizzo di un tipo di istanza T.

Traffico in entrata o in uscita elevato

Per monitorare il traffico in entrata e in uscita verso il cluster, utilizza le metriche di Amazon CloudWatch BytesInPerSec e BytesOutPerSec. Se queste metriche per un broker hanno valori elevati o non uniformi, l'utilizzo della CPU da parte del broker potrebbe essere elevato.

I broker potrebbero riscontrare un traffico elevato quando i topic ad alto volume hanno una distribuzione delle partizioni non uniforme. Oppure il producer non distribuisce i dati in modo uniforme su tutte le partizioni. Per risolvere il problema, controlla la chiave di partizionamento del producer e aggiorna la configurazione del cluster. Quindi configura la chiave di partizionamento in modo che una partizione non riceva più dati delle altre.

Potresti inoltre riscontrare un traffico elevato quando il gruppo di consumer esegue commit degli offset molto frequentemente. Il traffico derivante dai commit degli offset influisce sul broker. Per risolvere il problema, devi ridurre il numero di gruppi di consumer o aggiornare le dimensioni dell'istanza.

Numero di partizioni per broker superiore al valore consigliato

Se il numero di partizioni per broker supera il valore consigliato, il cluster si sovraccarica. Quando il cluster si sovraccarica, non puoi intraprendere le seguenti azioni:

  • Aggiornamento della configurazione del cluster.
  • Aggiornamento della versione di Apache Kafka per il cluster.
  • Aggiornamento del cluster a un tipo di broker di dimensioni inferiori.
  • Associazione di un segreto AWS Secrets Manager a un cluster con autenticazione SASL/SCRAM.

Quando hai troppe partizioni, potresti riscontrare un utilizzo elevato della CPU e subire un degrado delle prestazioni.

Per risolvere il problema, intraprendi le seguenti azioni:

  • Elimina i topic obsoleti o inutilizzati per riportare il numero di partizioni entro il limite consigliato. Per identificare un topic inutilizzato, attiva il monitoraggio a livello di topic e controlla le metriche BytesInPerSec e BytesOutPerSec a livello di topic per verificare la presenza di traffico. Se non è presente traffico in entrata, puoi eliminarlo.
  • Aumenta verticalmente il tipo di istanza del broker passando a un tipo in grado di ospitare il numero di partizioni necessarie. Inoltre, aggiungi altri broker e riassegna le partizioni.

Nota: devi eseguire il comando kafka-reassign-partitions per riassegnare le partizioni. Amazon MSK non riassegna automaticamente le partizioni quando aggiungi broker.

Utilizzo di un tipo di istanza T

I tipi di istanza T hanno prestazioni di base con alcune funzionalità espandibili. Queste istanze consentono prestazioni di base al 20% di utilizzo della CPU. Quando tale valore viene superato, il tipo di istanza inizia a utilizzare i crediti CPU. Quando invece l'utilizzo è inferiore al 20%, maturi crediti CPU.

Assicurati di monitorare la metrica del saldo dei crediti CPU per le istanze espandibili in Amazon CloudWatch.

Monitora l'utilizzo della CPU di base e il saldo dei crediti per qualsiasi cluster eseguito su tipi di istanze T. Quando l'utilizzo della CPU è superiore al valore di base e non sono disponibili crediti, possono verificarsi problemi di prestazioni nel cluster.

Altre possibili cause

Numero di connessioni al client elevato

Un picco di una delle seguenti metriche di Amazon CloudWatch potrebbe causare un aumento dell'utilizzo della CPU da parte del broker:

  • ConnectionCount
  • ConnectionCreationRate
  • ConnectionCloseRate

Per risolvere il problema, monitora queste metriche in Amazon CloudWatch. Quindi riduci il numero di connessioni in base alle esigenze o aumenta verticalmente il tipo di broker.

Rilevamento dell'errore di un broker e ripristino da parte di Amazon MSK

Quando Amazon MSK rileva l'errore di un broker ed esegue un'operazione di manutenzione automatica (ad esempio, applicazione di una patch), si verifica un aumento dell'utilizzo della CPU. Non appena Amazon MSK completa l'operazione sul cluster, l'utilizzo della CPU scende a livelli di utilizzo normali.

Richiesta di modifica del tipo di broker o aggiornamento della versione da parte di un utente

Quando un utente richiede una modifica del tipo di broker o un aggiornamento della sua versione, Amazon MSK distribuisce flussi di lavoro continui che portano offline un broker alla volta. Quando i broker con partizioni leader si disconnettono, Apache Kafka riassegna la gerarchia delle partizioni per ridistribuire il lavoro ad altri broker del cluster. Monitora l'utilizzo della CPU per questi broker e assicurati di avere nel cluster una capacità aggiuntiva sufficiente in termini di CPU per tollerare eventi operativi.

Utilizzo della CPU da parte di uno o più broker elevato a causa di una distribuzione dei dati non uniforme

L'utilizzo della CPU da parte di uno o più broker potrebbe essere elevato a causa di una distribuzione dei dati non uniforme. Ad esempio, se scrivi su due broker su sei e questi sono i broker più consumati, l'utilizzo della CPU è maggiore. Per risolvere il problema, assicurati di utilizzare la tecnica del round robin in modo che le partizioni nel cluster siano ben distribuite.

Per vedere come il controller del cluster Apache Kafka distribuisce le partizioni nel cluster, esegui questo comando:

bin/kafka-topics.sh -bootstrap-server $MYBROKERS --describe --topic my-topic

Esempio di output:

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

Monitoraggio aperto attivato

Se attivi il monitoraggio aperto con Prometheus e l'intervallo di scrape è basso, il numero di metriche emesse potrebbe essere elevato, con conseguente aumento dell'utilizzo della CPU. Per risolvere il problema, aumenta l'intervallo di scrape. È consigliabile non superare 1 scrape al minuto per broker per preservare le prestazioni del cluster Amazon MSK. Per impostazione predefinita, l'intervallo di scrape è 10-15 secondi.