View a markdown version of this page

Solución de problemas de Amazon MSK Replicator - 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.

Solución de problemas de Amazon MSK Replicator

La siguiente información puede ayudarle a solucionar problemas con MSK Replicator. Consulte otras funciones Solución de problemas del clúster de Amazon MSK de Amazon MSK. También puede publicar el problema en AWS re:Post.

El estado del replicador pasa de CREATING a FAILED

Causas comunes del error de creación de MSK Replicator:

  1. Compruebe que los grupos de seguridad que proporcionó para el clúster de destino tengan reglas de salida para permitir el tráfico a los grupos de seguridad del clúster de destino, y que los grupos de seguridad del clúster de destino tengan reglas de entrada que acepten el tráfico de los grupos de seguridad de Replicator.

  2. Para la replicación entre regiones, compruebe que el clúster de origen tenga activada la conectividad de varias VPC para el control de acceso de IAM y que la política del clúster esté configurada en el clúster de origen.

  3. Compruebe que la función de IAM proporcionada durante la creación tenga los permisos necesarios para leer y escribir en los clústeres de origen y destino, incluidos los permisos para escribir en los temas.

  4. Compruebe que las ACL de la red no bloqueen la conexión entre el MSK Replicator y los clústeres.

  5. Es posible que los clústeres de origen o de destino no estuvieran completamente disponibles cuando el MSK Replicator intentó conectarse. Esto puede deberse a una carga excesiva, al uso del disco o al uso de la CPU. Solucione el problema con los agentes e intente crear el replicador de nuevo.

Tras hacer las validaciones anteriores, vuelva a crear el Replicador MSK.

El Replicador parece atascado en el estado de CREACIÓN

La creación de MSK Replicator puede tardar hasta 30 minutos. Espere 30 minutos y compruebe de nuevo el estado del replicador.

Replicator no replica datos o solo replica datos parciales

  1. Verifica que tu Replicator no tenga errores de autenticación utilizando la AuthError métrica de Amazon. CloudWatch Si esta métrica es superior a 0, compruebe la política de roles de IAM y asegúrese de que no haya ningún permiso de denegación establecido para los permisos del clúster.

  2. Compruebe que los clústeres de origen y destino no tengan problemas (demasiadas conexiones, disco a plena capacidad o uso elevado de la CPU).

  3. Compruebe que se pueda acceder a los clústeres mediante la KafkaClusterPingSuccessCount métrica. Si esta métrica es 0 o no tiene ningún punto de datos, compruebe los permisos de red y de rol de IAM.

  4. Verifique que su replicador no tenga errores mediante la métrica. ReplicatorFailure Si está por encima de 0, compruebe la función de IAM para ver los permisos a nivel de tema.

  5. Comprueba que la expresión regular de la lista de temas permitidos coincide con los nombres de los temas que quieres replicar y de que la lista de rechazos no excluye temas.

  6. El Replicador puede tardar hasta 30 segundos en detectar y crear nuevos temas. Los mensajes producidos antes de que se cree el tema en el clúster de destino no se replicarán si la posición inicial es la más reciente (predeterminada).

Los desplazamientos de mensajes en el clúster de destino son diferentes a las del clúster de origen

MSK Replicator consume los mensajes del clúster de origen y los envía al clúster de destino, lo que puede provocar diferentes compensaciones. Si ha activado la sincronización offset entre grupos de consumidores, MSK Replicator traducirá automáticamente las compensaciones para que, tras la conmutación por error, sus consumidores puedan reanudar el procesamiento desde donde lo dejaron.

Replicator no sincroniza las compensaciones de grupos de consumidores

  1. Verifique que la replicación de datos funcione según lo esperado.

  2. Compruebe que la expresión regular de la lista de productos permitidos coincida con los grupos de consumidores que desea replicar.

  3. Compruebe que el Replicador MSK haya creado el tema en el clúster de destino. Si su grupo de consumidores del clúster de origen solo ha consumido mensajes que no se han replicado, el grupo de consumidores no se replicará en el clúster de destino. Cuando su grupo de consumidores comience a leer los mensajes recién replicados, MSK Replicator replicará automáticamente el grupo de consumidores.

nota

MSK Replicator optimiza la sincronización offset entre grupos de consumidores para que los consumidores lean casi desde el final de la partición de temas. Si sus grupos de consumidores están retrasados en el clúster de origen, es posible que observen un retraso mayor en el de destino. A medida que sus consumidores se pongan al día, el Replicador MSK reducirá automáticamente el retraso.

La latencia de replicación es alta o sigue aumentando

  1. Compruebe que tiene el número correcto de particiones. La siguiente tabla muestra el número mínimo recomendado de particiones para el rendimiento deseado.

    Rendimiento y número mínimo recomendado de particiones
    Rendimiento (MB/s) Se requieren particiones mínimas
    50167
    100334
    250833
    5001666
    1 0003333
  2. Compruebe que tiene suficiente capacidad de lectura y escritura en los clústeres. El Replicador MSK actúa como consumidor del clúster de origen (salida) y como productor del clúster de destino (entrada). Aprovisione la capacidad del clúster para soportar el tráfico de replicación además de otro tipo de tráfico.

  3. La latencia de replicación varía según la distancia entre pares de regiones.

  4. Verifique que su replicador no esté siendo limitado con la métrica. ThrottleTime Si está por encima de 0, ajusta las cuotas de Kafka. Consulte Administrar el rendimiento con cuotas de Kafka.

  5. Consulta el panel de estado del AWS servicio para ver los eventos de servicio de MSK en tu región.

Solución de problemas con la métrica ReplicatorFailure

La ReplicatorFailure métrica le ayuda a supervisar y detectar problemas de replicación. Un valor distinto de cero suele indicar un error de replicación causado por limitaciones en el tamaño de los mensajes, infracciones del intervalo de marcas de tiempo o problemas de tamaño de los lotes de registros. Si ha configurado la entrega de registros para su replicador, puede usar los mensajes de registro entregados para identificar el error específico. Para obtener más información, consulte Registros de MSK Replicator. Si la entrega de registros no está configurada, siga los pasos que se indican a continuación para consultar los mensajes de error en el tema sobre el estado del replicador.

Si la ReplicatorFailure métrica indica un valor distinto de cero, sigue estos pasos para solucionar el problema:

  1. Configure un cliente que pueda conectarse al clúster de MSK de destino y que tenga configuradas las herramientas de CLI de Apache Kafka. Consulte Conexión a un clúster de Amazon MSK aprovisionado.

  2. Abra la consola de Amazon MSK en? https://console.aws.amazon.com/msk/home region=us-east-1#/home/.

    Obtenga los ARN del Replicador de MSK y del clúster de MSK de destino, y obtenga los puntos de enlace del intermediario del clúster de MSK de destino. Obtenga los agentes de arranque mediante la Consola de administración de AWS

  3. Exporte el ARN de MSK Replicator y los puntos de enlace del bróker:

    export TARGET_CLUSTER_SERVER_STRING=<BootstrapServerString> export REPLICATOR_ARN=<ReplicatorARN> export CONSUMER_CONFIG_FILE=<ConsumerConfigFile>
  4. En su <path-to-your-kafka-installation>/bin directorio, guarde el siguiente script como. query-replicator-failure-message.sh

    #!/bin/bash # Script: Query MSK Replicator Failure Message # Description: This script queries exceptions from AWS MSK Replicator status topics # It takes a replicator ARN and bootstrap server as input and searches for replicator exceptions # in the replicator's status topic, formatting and displaying them in a readable manner # # Required Arguments: # --replicator-arn: The ARN of the AWS MSK Replicator # --bootstrap-server: The Kafka bootstrap server to connect to # --consumer.config: Consumer config properties file # Usage Example: # ./query-replicator-failure-message.sh --replicator-arn <replicator-arn> --bootstrap-server <bootstrap-server> --consumer.config <consumer.config> print_usage() { echo "USAGE: $0 ./query-replicator-failure-message.sh --replicator-arn <replicator-arn> --bootstrap-server <bootstrap-server> --consumer.config <consumer.config>" echo "--replicator-arn <String: MSK Replicator ARN> REQUIRED: The ARN of AWS MSK Replicator." echo "--bootstrap-server <String: server to connect to> REQUIRED: The Kafka server to connect to." echo "--consumer.config <String: config file> REQUIRED: Consumer config properties file." exit 1 } # Initialize variables replicator_arn="" bootstrap_server="" consumer_config="" # Parse arguments while [[ $# -gt 0 ]]; do case "$1" in --replicator-arn) if [ -z "$2" ]; then echo "Error: --replicator-arn requires an argument." print_usage fi replicator_arn="$2"; shift 2 ;; --bootstrap-server) if [ -z "$2" ]; then echo "Error: --bootstrap-server requires an argument." print_usage fi bootstrap_server="$2"; shift 2 ;; --consumer.config) if [ -z "$2" ]; then echo "Error: --consumer.config requires an argument." print_usage fi consumer_config="$2"; shift 2 ;; *) echo "Unknown option: $1"; print_usage ;; esac done # Check for required arguments if [ -z "$replicator_arn" ] || [ -z "$bootstrap_server" ] || [ -z "$consumer_config" ]; then echo "Error: --replicator-arn, --bootstrap-server, and --consumer.config are required." print_usage fi # Extract replicator name and suffix from ARN replicator_arn_suffix=$(echo "$replicator_arn" | awk -F'/' '{print $NF}') replicator_name=$(echo "$replicator_arn" | awk -F'/' '{print $(NF-1)}') echo "Replicator name: $replicator_name" # List topics and find the status topic topics=$(./kafka-topics.sh --command-config client.properties --list --bootstrap-server "$bootstrap_server") status_topic_name="__amazon_msk_replicator_status_${replicator_name}_${replicator_arn_suffix}" # Check if the status topic exists if echo "$topics" | grep -Fq "$status_topic_name"; then echo "Found replicator status topic: '$status_topic_name'" ./kafka-console-consumer.sh --bootstrap-server "$bootstrap_server" --consumer.config "$consumer_config" --topic "$status_topic_name" --from-beginning | stdbuf -oL grep "Exception" | stdbuf -oL sed -n 's/.*Exception:\(.*\) Topic: \([^,]*\), Partition: \([^\]*\).*/ReplicatorException:\1 Topic: \2, Partition: \3/p' else echo "No topic matching the pattern '$status_topic_name' found." fi

    Ejecute este script para consultar los mensajes de error del MSK Replicator:

    <path-to-your-kafka-installation>/bin/query-replicator-failure-message.sh --replicator-arn $REPLICATOR_ARN --bootstrap-server $TARGET_CLUSTER_SERVER_STRING --consumer.config $CONSUMER_CONFIG_FILE

    Este script muestra todos los errores junto con sus mensajes de excepción y las particiones de temas afectadas. Dado que el tema contiene todos los mensajes históricos de error, inicie la investigación con el último mensaje. El siguiente es un ejemplo de un mensaje de error:

    ReplicatorException: The request included a message larger than the max message size the server will accept. Topic: test, Partition: 1
Fallos y soluciones comunes

A continuación se describen los errores más comunes de MSK Replicator y cómo mitigarlos.

Tamaño del mensaje mayor que max.request.size

Causa: el tamaño del mensaje individual supera los 10 MB (el máximo predeterminado).

Lo siguiente es un ejemplo de este tipo de mensaje de error.

ReplicatorException: The message is 20635370 bytes when serialized which is larger than 10485760, which is the value of the max.request.size configuration. Topic: test, Partition: 1

Solución: reduce el tamaño de los mensajes individuales de tu tema. Si no puedes, sigue las instrucciones para solicitar un aumento del límite.

Tamaño del mensaje mayor que el tamaño máximo de mensaje que el servidor acepta

Causa: el tamaño del mensaje supera el tamaño máximo de mensaje del clúster de destino.

Lo siguiente es un ejemplo de este tipo de mensaje de error.

ReplicatorException: The request included a message larger than the max message size the server will accept. Topic: test, Partition: 1

Solución: aumente la max.message.bytes configuración en el clúster o tema de destino. Consulte max.message.bytes.

La marca de tiempo está fuera del intervalo

Causa: la marca de tiempo del mensaje está fuera del rango permitido del clúster de destino.

Lo siguiente es un ejemplo de este tipo de mensaje de error.

ReplicatorException: Timestamp 1730137653724 of message with offset 0 is out of range. The timestamp should be within [1730137892239, 1731347492239] Topic: test, Partition: 1

Solución: actualice la configuración del clúster de message.timestamp.before.max.ms destino. Consulte https://kafka.apache.org/documentation/#topicconfigs_message.timestamp.before.max.ms message.timestamp.before.max.ms.

Lote de registros demasiado grande

Causa: el tamaño del lote de registros supera el tamaño del segmento establecido para el tema en el clúster de destino. El Replicador de MSK admite un tamaño máximo de lote de 1 MB.

Lo siguiente es un ejemplo de este tipo de mensaje de error.

ReplicatorException: The request included message batch larger than the configured segment size on the server. Topic: test, Partition: 1

Solución: actualice el clúster de destino segment.bytes para que tenga al menos 1048576 (1 MB). Consulte segment.bytes.

nota

Si la ReplicatorFailure métrica sigue emitiendo valores distintos de cero después de aplicar estas soluciones, repite el proceso de solución de problemas hasta que la métrica emita un valor de cero.

Solucione problemas de replicación desde clústeres de Kafka autogestionados

MSK Replicator no puede conectarse al clúster autogestionado de Kafka

Realice las siguientes comprobaciones si MSK Replicator no puede conectarse a su clúster autogestionado de Kafka:

  1. Compruebe que su conexión VPN o Direct Connect esté activa y que las tablas de rutas sean correctas.

  2. Compruebe que los grupos de seguridad permitan el tráfico entrante desde las subredes de MSK Replicator en el puerto SASL_SSL (normalmente el 9096).

  3. Verifique la resolución del DNS desde la VPC hasta los nombres de host del agente de clústeres autogestionado.

  4. Compruebe la KafkaClusterPingSuccessCount métrica en Amazon CloudWatch : un valor de 0 indica un error de conectividad.

SASL/SCRAM o errores de autenticación de mTLS

Si la AuthError métrica no es cero o los registros del Replicador muestran SASL/SCRAM errores de mTLS:

  1. Compruebe que las credenciales almacenadas en AWS Secrets Manager coincidan con las credenciales de usuario de SCRAM del clúster autogestionado (para SASL/SCRAM) o que el certificado de cliente y la clave privada sean correctos (para los MTLS).

  2. Compruebe que el usuario de SCRAM o el director del certificado tengan los permisos de ACL requeridos (leer, describir sobre los temas, leer, describir sobre los grupos de consumidores, describir sobre el clúster).

  3. Compruebe la AuthError métrica para confirmar los errores de autenticación e identificar si el clúster de origen o de destino se ve afectado mediante la ClusterAlias dimensión.

SASL/OAUTHBEARER Errores de autenticación (OAuth)

Si la AuthError métrica no es cero o los registros del Replicador muestran errores o recuperaciones del token de acceso: SASL/OAUTHBEARER

  1. Comprueba que tokenEndpointUrl es correcto, utiliza el esquema HTTPS y que se puede acceder a él desde las subredes de VPC que proporcionaste para el Replicador. Un valor KafkaClusterPingSuccessCount de 0 combinado con errores de token suele indicar que no se puede acceder al punto final del token.

  2. client_secretEn cuanto al mecanismo de credenciales del cliente, compruebe que los caracteres client_id y los de AWS Secrets Manager son correctos y que el mecanismo de adquisición del token coincide con lo que espera su IDP.

  3. Comprueba que tokenEndpointAuthenticationMethod sea válido para tu mecanismo de adquisición de tokens. El mecanismo de credenciales del cliente requiere POST oBASIC, y el mecanismo de afirmación de las credenciales del cliente requiereNONE.

  4. Para los mecanismos de afirmación de credenciales de portador y cliente de JWT de IAM, compruebe que el rol de ejecución del servicio tiene el sts:GetWebIdentityToken permiso y que signingAlgorithm coinciden con lo que espera su IDP cuando valida el audience token.

  5. Si su IDP usa una CA privada, verifique que el certificado de CA al que hace referencia esté completo y sea válido. tokenEndpointTlsCertificateArn

  6. Compruebe que el principal de Kafka al que su IDP asigna el token de acceso tenga los permisos de ACL que MSK Replicator necesita en el clúster de origen.

  7. Compruebe los registros del Replicador para ver el estado HTTP y el código de OAuth error devueltos por el punto final del token. MSK Replicator registra estos campos, pero nunca registra el cuerpo de respuesta del punto final del token.

Problemas con el certificado SSL

Si el replicador no puede establecer una conexión segura con el clúster autogestionado:

  1. Compruebe que el certificate valor de AWS Secrets Manager incluya toda la cadena de certificados de la CA en formato PEM.

  2. Compruebe que el agente de escucha SSL esté configurado en todos los agentes de clústeres autogestionados.

  3. Compruebe que el certificado no haya caducado y que lo haya emitido una CA de confianza.

Un grupo de consumidores compensa los errores de sincronización de los clústeres autogestionados

Si las compensaciones de los grupos de consumidores no se sincronizan correctamente:

  1. Verifique la ConsumerGroupOffsetSyncFailure métrica: debe ser 0.

  2. Compruebe que los grupos de consumidores consumen activamente el clúster de origen (es posible que los grupos de consumidores inactivos no estén sincronizados).

  3. Para la replicación bidireccional, compruebe que synchroniseConsumerGroupOffsets está configurada true en ambos replicadores.