¿Cómo puedo solucionar problemas de uso elevado de la CPU en uno o más agentes de un clúster de Amazon MSK?

8 minutos de lectura
0

Necesito solucionar un problema de uso elevado de la CPU en uno o más agentes de mi clúster de Amazon Managed Streaming para Apache Kafka (Amazon MSK).

Resolución

El uso total de la CPU de un clúster de Amazon MSK se calcula como la suma de lo siguiente:

  • Porcentaje de CPU en el espacio de usuario definido por la métrica CpuUser
  • Porcentaje de CPU en el espacio del kernel definido por CpuSystem

Se recomienda mantener el uso total de la CPU en menos del 60 % para que el 40 % de la CPU de su clúster esté disponible. Apache Kafka puede redistribuir la carga de la CPU a través de los agentes en el clúster según sea necesario. Por ejemplo, cuando Amazon MSK se recupera del error de un agente, la CPU disponible se puede utilizar para llevar a cabo el mantenimiento automático, como la aplicación de parches.

Las siguientes son algunas de las causas más comunes de un uso elevado de la CPU en su clúster de Amazon MSK:

  • El tráfico de entrada o salida es elevado.
  • Se superó el número de particiones por agente y el clúster se sobrecargó.
  • Está utilizando una instancia de tipo T.

El tráfico de entrada o salida es elevado

Puede supervisar el tráfico de entrada y salida del clúster con las métricas BytesInPerSec y BytesOutPerSec de Amazon CloudWatch. Si las métricas de un agente tienen valores altos o están sesgadas, es posible que el agente esté experimentando un uso elevado de la CPU. Las siguientes son algunas de las causas del tráfico elevado de entrada y salida:

  • El recuento de particiones por el tema que recibe mucho tráfico no se distribuye de manera uniforme entre los agentes. O bien, el productor no envía los datos de manera uniforme a todas las particiones. Asegúrese de comprobar la clave de partición del productor y actualizar la configuración del clúster en consecuencia. Asegúrese de configurar la clave de partición de forma que una partición no reciba más datos que el resto.
  • El grupo de consumidores confirma los desplazamientos con mucha frecuencia. El tráfico de las confirmaciones de compensación afecta al agente. En estos casos, verá un valor de MessagesInPerSec significativamente alto para el agente que es el líder de la partición de temas _consumer_offset. Esta es la partición en la que se confirma el desplazamiento del grupo de consumidores. Para resolver este problema, reduzca la cantidad de grupos de consumidores o actualice el tamaño de su instancia.

Se superó el número de particiones por agente

Si la cantidad de particiones por agente supera el valor recomendado, el clúster está sobrecargado. En este caso, es posible que no pueda llevar a cabo las siguientes acciones:

  • Actualizar la configuración del clúster.
  • Actualizar la versión de Apache Kafka para el clúster.
  • Actualizar el clúster a un tipo de agente más pequeño.
  • Asociar un secreto de AWS Secrets Manager con un clúster que tiene autenticación SASL/SCRAM.

Tener demasiadas particiones provoca una degradación del rendimiento debido a un uso elevado de la CPU. Esto significa que cada partición utiliza cierta cantidad de recursos del agente, incluso cuando hay poco tráfico. Para solucionar este problema, pruebe lo siguiente:

  • Elimine los temas obsoletos o no utilizados para que el recuento de particiones se encuentre dentro del límite recomendado.
  • Escale verticalmente el tipo de instancia del agente al tipo que pueda acomodar la cantidad de particiones que necesita. Además, trate de añadir más agentes y reasignar particiones.

Tenga en cuenta que las particiones no se reasignan automáticamente al añadir agentes. Debe ejecutar el comando kafka-reassign-partitions. Para obtener más información, consulte Reasignar particiones después de cambiar el tamaño del clúster.

Está utilizando una instancia de tipo T

Tenga en cuenta que las instancias de tipo T tienen un rendimiento básico con algunas características ampliables. Estas instancias permiten un rendimiento de referencia del 20 % de uso de la CPU. Si supera este valor, el tipo de instancia empezará a utilizar los créditos de la CPU. Cuando el uso es inferior al 20 %, entonces se acumulan créditos de CPU.

Asegúrese de supervisar la métrica del saldo de créditos de la CPU en Amazon CloudWatch. Los créditos se acumulan en el saldo de créditos una vez obtenidos y se eliminan del saldo de créditos cuando se gastan. El saldo de créditos tiene un límite máximo que determina el tamaño de la instancia. Una vez alcanzado este límite, se descartan todos los créditos nuevos que se obtengan. Para el tipo de instancia T2 Standard, los créditos de lanzamiento no se cuentan para el límite.

Los créditos de CPU indicados en la métrica CPUCreditBalance están disponibles para que la instancia los gaste hasta superar su uso de CPU de referencia. Cuando se ejecuta una instancia, los créditos de CPUCreditBalance no caducan. Cuando se detiene una instancia T4g, T3a o T3, el valor de CPUCreditBalance persiste durante siete días. Transcurridos siete días, perderá todos los créditos acumulados. Cuando una instancia T2 se detiene, el valor de CPUCreditBalance no se mantiene y se pierden todos los créditos acumulados. Las métricas de crédito de la CPU están disponibles con una frecuencia de cinco minutos.

Asegúrese de supervisar el uso de la CPU de referencia y el saldo de créditos de cualquier clúster que se ejecute en instancias de tipo T. Si el uso de la CPU supera el valor de referencia y no quedan más créditos para gastar, el clúster tiene problemas de rendimiento.

Otras causas

  • El número de conexiones al cliente es elevado: Un aumento en cualquiera de las siguientes métricas de CloudWatch podría provocar un aumento del uso de la CPU averiada. Para solucionar este problema, supervise estas métricas en CloudWatch. A continuación, reduzca el número de conexiones según sea necesario o escale verticalmente el tipo de agente.
    • ConnectionCount
    • ConnectionCreationRate
    • ConnectionCloseRate
  • El número de grupos de consumidores es alto: Si el número de grupos de consumidores es alto (por ejemplo, más de 1000), el uso de CPU del agente podría aumentar. También puede producirse un uso elevado de la CPU cuando un grupo de consumidores confirma desplazamientos con demasiada frecuencia. Para resolver este problema, reduzca la cantidad de grupos de consumidores o actualice el tamaño de su instancia.
  • Amazon MSK detecta un error de un agente y se recupera de él: En este caso, Amazon MSK lleva a cabo una operación de mantenimiento automática, como la aplicación de parches, lo que aumenta el uso de la CPU.
  • Un usuario solicita un cambio de tipo de agente o una actualización de versión: En este caso, Amazon MSK implementa flujos de trabajo continuos que permiten desconectar a un agente a la vez. Cuando los agentes con particiones principales se desconectan, Apache Kafka reasigna el liderazgo de la partición para redistribuir el trabajo a otros agentes del clúster. Supervise el uso de la CPU de estos agentes y asegúrese de tener suficiente espacio libre de CPU en su clúster para tolerar los eventos operativos.
  • El uso de CPU de uno o más agentes es elevado debido a la distribución sesgada de los datos: Por ejemplo, si dos de cada seis agentes son los que más escriben y más consumen, entonces verán un mayor uso de la CPU. Para solucionar este problema, asegúrese de utilizar la técnica de todos contra todos para que las particiones del clúster estén bien distribuidas. Ejecute el comando topic describe para ver cómo se distribuyen las particiones en el clúster. El resultado podría tener un aspecto similar al siguiente:
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
  • Ha activado la supervisión abierta: Si ha activado la supervisión abierta con Prometheus y el intervalo de extracción es bajo, es posible que se emita un gran número de métricas. Esto lleva a un aumento en el uso de la CPU. Para resolver este problema, aumente el intervalo de extracción.
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año