Utilice LinkedIn el control de crucero para Apache Kafka con Amazon MSK - Transmisión administrada de Amazon para Apache Kafka

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Utilice LinkedIn el control de crucero para Apache Kafka con Amazon MSK

Puede utilizar el LinkedIn Cruise Control para reequilibrar el clúster de Amazon MSK, detectar y corregir anomalías y supervisar el estado y el estado del clúster.

nota

Si está activado el reequilibrio inteligente en los clústeres basados en Express recién creados, no podrá utilizar herramientas de terceros, como Cruise Control, para reequilibrar las particiones. Primero debes pausar el reequilibrio inteligente para usar la API de reasignación de particiones proporcionada por estas herramientas de terceros.

Descarga y compilación de Cruise Control
  1. Cree una EC2 instancia de Amazon en la misma Amazon VPC que el clúster de Amazon MSK.

  2. Instala Prometheus en la instancia de EC2 Amazon que creaste 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. Descarga Cruise Control en la EC2 instancia de Amazon. (Si lo prefieres, puedes usar una EC2 instancia de Amazon 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. Your-Cruise-Control-FolderSustitúyelo por el nombre de la carpeta actual (la carpeta que obtuviste 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 GetBootstrapBrokersy DescribeClusterAPI o sus equivalentes de 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 config/capacityCores.json archivo para especificar el tamaño de disco, los núcleos de CPU y in/out los límites de red correctos. 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). Para los corredores estándar, puede usar la operación DescribeClusterAPI (o la CLI describe-cluster) para obtener el tamaño del disco. Para conocer los núcleos de CPU y in/out los límites de la red, consulte Tipos de EC2 instancias de Amazon.

    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. Usa el Cruise Control APIs o la interfaz de usuario para asegurarte de que Cruise Control tiene 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 CloudFormation plantilla para implementar fácilmente Cruise Control y Prometheus 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 EC2 instancia de Amazon con Cruise Control y Prometheus preconfigurados.

  • Compatibilidad con el clúster aprovisionado de Amazon MSK.

  • Autenticación flexible con un IAM. 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.

nota

Si tiene un clúster basado en Express recién creado, utilice el reequilibrio inteligente para la distribución automática de las particiones a medida que amplíe o reduzca los clústeres.

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.