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

7 minuti di lettura
0

Devo risolvere i problemi di utilizzo elevato della CPU su uno o più broker nel cluster Amazon Managed Streaming per Apache Kafka (Amazon MSK).

Risoluzione

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

  • Percentuale di CPU nello spazio utente definita dal parametro CpuUser
  • Percentuale di CPU nello spazio del kernel definita da CpuSystem

È consigliabile mantenere l'utilizzo totale della CPU a meno 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 Amazon MSK esegue il ripristino da un errore del broker, la CPU disponibile può essere utilizzata per eseguire operazioni di manutenzione automatica, ad esempio l'applicazione di patch.

Di seguito sono riportate alcune delle cause più comuni di un elevato utilizzo della CPU nel cluster Amazon MSK:

  • Il traffico in entrata o in uscita è elevato.
  • Il numero di partizioni per broker è stato superato, sovraccaricando il cluster.
  • Si utilizza un'istanza di tipo T.

Il traffico in entrata o in uscita è elevato

Il traffico in entrata e in uscita verso il cluster può essere monitorato utilizzando i parametri BytesInPerSec e BytesOutPerSec di Amazon CloudWatch. Se i parametri per un broker presentano valori elevati o sono distorti, è possibile che il broker stia riscontrando un utilizzo elevato della CPU. Di seguito sono riportate alcune delle cause di un elevato traffico in entrata e in uscita:

  • Il numero di partizioni per l'argomento che riceve un traffico elevato non è distribuito uniformemente tra i broker. Oppure, il produttore non invia i dati in modo uniforme a tutte le partizioni. Assicurati di controllare la chiave di partizionamento del produttore e di aggiornare la configurazione del cluster di conseguenza. Assicurati di configurare la chiave di partizione in modo che una partizione non riceva più dati delle altre.
  • Il gruppo di consumer esegue il commit degli offset molto frequentemente. Il traffico derivante dai commit degli offset influisce sul broker. In questi casi, si osserva un valore MessagesInPerSec molto elevato per il broker principale per la partizione dell'argomento _consumer_offset. Questa è la partizione su cui si esegue il commit degli offset del gruppo di consumer. Per risolvere questo problema, è necessario ridurre il numero di gruppi di consumer o aggiornare le dimensioni dell'istanza.

È stato superato il numero di partizioni per broker

Se il numero di partizioni per broker supera il valore consigliato, il cluster è sovraccarico. In questo caso, le seguenti attività potrebbero non essere consentite:

  • 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.

Un numero elevato di partizioni riduce il livello delle prestazioni a causa dell'elevato utilizzo della CPU. Ciò significa che ogni partizione utilizza una certa quantità di risorse del broker, anche quando il traffico è limitato. Per risolvere questo problema, prova le seguenti operazioni:

  • Elimina gli argomenti obsoleti o non utilizzati per riportare il numero di partizioni entro il limite consigliato.
  • Aumenta il tipo di istanza del broker al tipo in grado di ospitare il numero di partizioni necessarie. Inoltre, prova ad aggiungere altri broker e a riassegnare le partizioni.

Attenzione: quando si aggiungono broker, le partizioni non vengono riassegnate automaticamente. È necessario eseguire il comando kafka-reassign-partitions. Per ulteriori informazioni, consulta Riassegnazione delle partizioni dopo la modifica delle dimensioni del cluster.

Stai usando un'istanza di tipo T

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

Assicurati di monitorare il parametro del saldo dei crediti CPU in Amazon CloudWatch. I crediti vengono accumulati nel saldo crediti dopo essere stati guadagnati ed eliminati dal saldo crediti quando vengono utilizzati. Il saldo crediti ha un limite massimo, determinato dalla dimensione dell'istanza. Una volta raggiunto il limite, tutti i nuovi crediti guadagnati vengono eliminati. Per il tipo di istanza T2 Standard, i crediti di avvio non sono conteggiati ai fini del raggiungimento del limite.

I crediti CPU indicati dal parametro CPUCreditBalance possono essere impiegati dall'istanza per superare l'utilizzo di base della CPU. Quando un'istanza è in esecuzione, i crediti in CPUCreditBalance non scadono. Quando un'istanza T4g, T3a o T3 si arresta, il valore CPUCreditBalance viene mantenuto per sette giorni. Dopo sette giorni, tutti i crediti accumulati verranno persi. Quando un'istanza T2 si arresta, il valore di CPUCreditBalance non viene mantenuto e tutti i crediti accumulati verranno persi. I parametri del credito CPU sono disponibili con una frequenza di cinque minuti.

Assicurati di monitorare l'utilizzo di base della CPU e il saldo crediti per tutti i cluster in esecuzione su istanze di tipo T. Quando l'utilizzo della CPU è superiore al valore di base e non sono disponibili crediti, possono verificarsi problemi di prestazioni nel cluster.

Altre cause

  • Il numero di connessioni al client è elevato: Un picco in uno dei seguenti parametri CloudWatch potrebbe causare un aumento dell'utilizzo della CPU per il broker. Per risolvere questo problema, monitora questi parametri su CloudWatch. Quindi, riduci il numero di connessioni in base alle esigenze o aumenta il tipo di broker.
    • ConnectionCount
    • ConnectionCreationRate
    • ConnectionCloseRate
  • Il numero di gruppi di consumer è elevato: Se il numero di gruppi di consumer è elevato (ad esempio, oltre 1000), potrebbe aumentare l'utilizzo della CPU per il broker. Un utilizzo elevato della CPU può verificarsi anche quando un gruppo di consumer esegue il commit degli offset troppo frequentemente. Per risolvere questo problema, è necessario ridurre il numero di gruppi di consumer o aggiornare le dimensioni dell'istanza.
  • Amazon MSK rileva gli errori del broker ed esegue il ripristino: In questo caso, Amazon MSK esegue un'operazione di manutenzione automatica, ad esempio l'applicazione di patch, con conseguente aumento dell'utilizzo della CPU.
  • Un utente richiede la modifica del tipo di broker o un aggiornamento della versione: In questo caso, Amazon MSK implementa flussi di lavoro continui che disconnettono 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 per la CPU per tollerare eventi operativi.
  • L'utilizzo della CPU per uno o più broker è elevato a causa della distribuzione non equilibrata dei dati: Ad esempio, se due broker su sei vengono scritti e utilizzati di più, osserveranno un utilizzo maggiore della CPU. Per risolvere questo problema, assicurati di utilizzare la tecnica round robin in modo che le partizioni nel cluster siano distribuite adeguatamente. Esegui il comando topic describe per visualizzare la distribuzione delle partizioni nel cluster. Il risultato potrebbe essere simile al seguente:
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
  • Hai abilitato il monitoraggio aperto: Se è stato abilitato il monitoraggio aperto con Prometheus e l'intervallo di scrape è basso, potrebbe verificarsi un numero elevato di parametri emessi. Ciò comporta un aumento dell'utilizzo della CPU. Per risolvere questo problema, aumenta l'intervallo di scrape.
AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa