Uso de Cruise Control de LinkedIn para Apache Kafka con Amazon MSK
Puede usar Cruise Control de LinkedIn para reequilibrar su clúster de Amazon MSK, detectar y corregir anomalías y supervisar el estado y el estado del clúster.
Descarga y compilación de Cruise Control
Cree una instancia de Amazon EC2 en la misma Amazon VPC que el clúster de Amazon MSK.
Instale Prometheus en la instancia de Amazon EC2 creada en el paso anterior. Anote la IP privada y el puerto. El número de puerto predeterminado es 9090. Para obtener información acerca de cómo configurar Prometheus para agregar métricas para su clúster, consulte Supervisión de un clúster de MSK aprovisionado con Prometheus.
-
Descargue Cruise Control
en la instancia de Amazon EC2. (Si lo prefiere, también puede utilizar una instancia de Amazon EC2 independiente para Cruise Control). Si el clúster tiene una versión de Apache Kafka anterior a la 2.4.*, utilice la última versión 2.4.* de Cruise Control. Si el clúster tiene una versión de Apache Kafka anterior a la 2.4.*, utilice la última versión 2.0.* de Cruise Control. -
Descomprima el archivo de Cruise Control y, a continuación, vaya a la carpeta descomprimida.
-
Ejecute el siguiente comando para instalar git.
sudo yum -y install git -
Ejecute el siguiente comando para inicializar el repositorio local. Sustituya
Your-Cruise-Control-Folderpor el nombre de su carpeta actual (la carpeta que obtuvo al descomprimir la descarga de Cruise Control).git init && git add . && git commit -m "Init local repo." && git tag -aYour-Cruise-Control-Folder-m "Init local version." -
Ejecute el comando siguiente para instalar y compilar el código fuente.
./gradlew jar copyDependantLibs
Configuración y ejecución de Cruise Control
-
Lleve a cabo las siguientes actualizaciones en el archivo
config/cruisecontrol.properties. Sustituya los servidores de arranque de ejemplo y la cadena bootstrap-brokers con los valores de su clúster. Para obtener estas cadenas para su clúster, puede ver los detalles del clúster en la consola. Como alternativa, puede usar las operaciones de la API GetBootstrapBrokers y DescribeCluster o sus equivalentes en la 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.jsonEn el caso de los agentes Express, recomendamos no utilizar
DiskCapacityGoalen ninguno de los objetivos configurados en las configuraciones del analizador. -
Edite el archivo
config/capacityCores.jsonpara especificar el tamaño de disco y los núcleos de CPU correctos, así como los límites de entrada/salida de la red. En el caso de los agentes Express, la entrada de capacidadDISKsolo es necesaria para configurar Cruise Control. Dado que Amazon MSK administra todo el almacenamiento de los agentes Express, debe establecer este valor en un número extremadamente alto, comoInteger.MAX_VALUE (2147483647). En el caso de los agentes Standard, puede usar la operación de API DescribeCluster o el comando de la CLI describe-clusterpara obtener el tamaño del disco. Para conocer los núcleos de CPU y los límites de entrada/salida de la red, consulte Tipos de instancias de Amazon EC2 . -
Si lo desea, puede instalar la interfaz de usuario de Cruise Control. Para descargarla, vaya a Setting Up Cruise Control Frontend
. -
Ejecute el siguiente comando para iniciar Cruise Control. Considere usar una herramienta como
screenotmuxpara mantener abierta una sesión de larga duración.<path-to-your-CRUISE-CONTROL-installation>/bin/kafka-cruise-control-start.sh config/cruisecontrol.properties 9091 Use las API de Cruise Control o la interfaz de usuario para asegurarse de que Cruise Control dispone de los datos de carga del clúster y de que hace sugerencias de reequilibrio. Podría llevarle varios minutos a obtener una ventana de métricas válida.
importante
Solo las versiones de Cruise Control 2.5.60 o posteriores son compatibles con agentes Express, ya que los agentes Express no exponen puntos de conexión de ZooKeeper.
Utilización de la plantilla de implementación automatizada de Cruise Control para Amazon MSK
También puede utilizar esta plantilla de CloudFormation
Características clave:
Aprovisionamiento automatizado de una instancia de Amazon EC2 con Cruise Control y Prometheus preconfigurados.
Compatibilidad con el clúster aprovisionado de Amazon MSK.
Autenticación flexible con IAM y PlainText.
Cruise Control no depende de Zookeeper.
Proporcione sus propios archivos de configuración almacenados en un bucket de Amazon S3 para personalizar fácilmente los destinos de Prometheus, los ajustes de capacidad de Cruise Control y otras configuraciones.
Guía de reequilibrio de la partición
Guía para la reasignación de particiones de Kafka
La reasignación de particiones en Kafka puede requerir un uso intensivo de recursos, ya que implica transferir grandes volúmenes de datos entre agentes, lo que puede provocar congestión de red y afectar las operaciones de los clientes. Las siguientes prácticas recomendadas ayudan a administrar la reasignación de particiones de forma eficaz mediante el ajuste de las tasas de limitación controlada, el aprovechamiento de los controles de simultaneidad y la comprensión de los tipos de reasignación, con el fin de minimizar la interrupción de las operaciones del clúster.
Administración de la simultaneidad en Cruise Control
Cruise Control proporciona parámetros de ajuste automático para controlar la simultaneidad de los movimientos de particiones y de liderazgo. Los siguientes parámetros ayudan a mantener una carga aceptable durante las reasignaciones:
Movimientos máximos de particiones simultáneos: defina
num.concurrent.partition.movements.per.brokerpara limitar la cantidad de movimientos de particiones entre agentes que se ejecutan de forma simultánea, lo que evita una utilización excesiva de la red.ejemplo Ejemplo
num.concurrent.partition.movements.per.broker = 5Esta configuración limita a cada agente a mover no más de 10 particiones en un momento dado, lo que permite equilibrar la carga entre los agentes.
Uso de la limitación controlada para controlar el ancho de banda
Parámetro de limitación controlada: al realizar una reasignación de particiones con
kafka-reassign-partitions.sh, utilice--throttle parameterpara establecer una tasa máxima de transferencia (en bytes por segundo) para el movimiento de datos entre agentes.ejemplo Ejemplo
--throttle 5000000Esto establece un ancho de banda máximo de 5 MB/s.
-
Equilibrio de la configuración de limitación controlada: la elección de una tasa de limitación controlada adecuada es fundamental:
Si se configura un valor demasiado bajo, la reasignación puede tardar considerablemente más.
Si se configura un valor demasiado alto, los clientes pueden experimentar aumentos de latencia.
Comience con una tasa de limitación controlada conservadora y ajústela en función de la supervisión del rendimiento del clúster. Pruebe la limitación controlada seleccionada antes de aplicarla en un entorno de producción para encontrar el equilibrio óptimo.
Prueba y validación en un entorno de preproducción
Antes de implementar reasignaciones en producción, realice pruebas de carga en un entorno de preproducción con configuraciones similares. Esto permite refinar con mayor precisión los parámetros y minimizar impactos inesperados en la producción activa.