Uso de Cruise Control de LinkedIn para Apache Kafka con Amazon MSK - Transmisión administrada de Amazon para Apache Kafka

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
  1. Cree una instancia de Amazon EC2 en la misma Amazon VPC que el clúster de Amazon MSK.

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

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

  4. Descomprima el archivo de Cruise Control y, a continuación, vaya a la carpeta descomprimida.

  5. Ejecute el siguiente comando para instalar git.

    sudo yum -y install git
  6. Ejecute el siguiente comando para inicializar el repositorio local. Sustituya Your-Cruise-Control-Folder por 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 -a Your-Cruise-Control-Folder -m "Init local version."
  7. Ejecute el comando siguiente para instalar y compilar el código fuente.

    ./gradlew jar copyDependantLibs
Configuración y ejecución de Cruise Control
  1. 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.json

    En el caso de los agentes Express, recomendamos no utilizar DiskCapacityGoal en ninguno de los objetivos configurados en las configuraciones del analizador.

  2. Edite el archivo config/capacityCores.json para 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 capacidad DISK solo 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, como Integer.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-cluster para 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.

    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." } ] }
  3. Si lo desea, puede instalar la interfaz de usuario de Cruise Control. Para descargarla, vaya a Setting Up Cruise Control Frontend.

  4. Ejecute el siguiente comando para iniciar Cruise Control. Considere usar una herramienta como screen o tmux para 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
  5. 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 para implementar Cruise Control y Prometheus con facilidad para obtener información más detallada sobre el rendimiento de su clúster de Amazon MSK y optimizar la utilización de los recursos.

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.broker para 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 = 5

    Esta 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 parameter para establecer una tasa máxima de transferencia (en bytes por segundo) para el movimiento de datos entre agentes.

    ejemplo Ejemplo
    --throttle 5000000

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