View a markdown version of this page

Risolvi i problemi di Amazon MSK Replicator - Amazon Managed Streaming per Apache Kafka

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Risolvi i problemi di Amazon MSK Replicator

Le seguenti informazioni possono aiutarti a risolvere i problemi con MSK Replicator. Consulta le altre Risolvi i problemi del tuo cluster Amazon MSK funzionalità di Amazon MSK. Puoi anche pubblicare il problema in AWS re:Post.

Lo stato del replicatore passa da CREATING a FAILED

Cause comuni dell'errore di creazione di MSK Replicator:

  1. Verifica che i gruppi di sicurezza forniti per il cluster di destinazione dispongano di regole in uscita per consentire il traffico verso i gruppi di sicurezza del cluster di destinazione e che i gruppi di sicurezza del cluster di destinazione abbiano regole in entrata che accettano il traffico dai gruppi di sicurezza Replicator.

  2. Per la replica tra regioni, verifica che il cluster di origine abbia la connettività multi-VPC attivata per il controllo degli accessi IAM e che la policy del cluster sia impostata sul cluster di origine.

  3. Verifica che il ruolo IAM fornito durante la creazione disponga delle autorizzazioni necessarie per leggere e scrivere sui cluster di origine e di destinazione, comprese le autorizzazioni per scrivere sugli argomenti.

  4. Verifica che gli ACL di rete non blocchino la connessione tra MSK Replicator e i cluster.

  5. È possibile che i cluster di origine o di destinazione non siano completamente disponibili quando MSK Replicator tenta di connettersi. Ciò potrebbe essere dovuto a un carico eccessivo, all'utilizzo del disco o della CPU. Risolvi il problema con i broker e prova di nuovo a creare il replicatore.

Dopo aver eseguito le convalide precedenti, crea nuovamente il replicatore MSK.

Replicator appare bloccato nello stato CREATING

La creazione di MSK Replicator può richiedere fino a 30 minuti. Attendi 30 minuti e controlla nuovamente lo stato del replicatore.

Replicator non sta replicando dati o replicando solo dati parziali

  1. Verifica che il tuo Replicator non stia riscontrando errori di autenticazione utilizzando la AuthError metrica di Amazon. CloudWatch Se questa metrica è superiore a 0, controlla la policy del ruolo IAM e assicurati che non siano impostate autorizzazioni di negazione per le autorizzazioni del cluster.

  2. Verifica che i cluster di origine e di destinazione non presentino problemi (troppe connessioni, disco a piena capacità o utilizzo elevato della CPU).

  3. Verifica che i tuoi cluster siano raggiungibili utilizzando la metrica. KafkaClusterPingSuccessCount Se questa metrica è 0 o non ha un datapoint, controlla le autorizzazioni di rete e dei ruoli IAM.

  4. Verifica che il tuo Replicator non stia riscontrando errori utilizzando la metrica. ReplicatorFailure Se superiore a 0, controlla il ruolo IAM per le autorizzazioni a livello di argomento.

  5. Verifica che l'espressione regolare nell'elenco degli argomenti consentiti corrisponda ai nomi degli argomenti che desideri replicare e che gli argomenti non vengano esclusi dalla lista negata.

  6. Il Replicator può impiegare fino a 30 secondi per rilevare e creare nuovi argomenti. I messaggi prodotti prima della creazione dell'argomento nel cluster di destinazione non verranno replicati se la posizione di partenza è l'ultima (impostazione predefinita).

Gli offset dei messaggi nel cluster di destinazione sono diversi da quelli del cluster di origine

MSK Replicator consuma i messaggi dal cluster di origine e li produce nel cluster di destinazione, il che può comportare offset diversi. Se è stata attivata la sincronizzazione degli offset per gruppi di consumatori, MSK Replicator tradurrà automaticamente gli offset in modo che, dopo il failover, i consumatori possano riprendere l'elaborazione dal punto in cui l'avevano interrotta.

Replicator non sincronizza gli offset dei gruppi di consumatori

  1. Verifica che la replica dei dati funzioni come previsto.

  2. Verifica che l'espressione regolare nell'elenco delle autorizzazioni corrisponda ai gruppi di consumatori che desideri replicare.

  3. Verifica che MSK Replicator abbia creato l'argomento sul cluster di destinazione. Se il gruppo di consumatori nel cluster di origine ha consumato solo messaggi che non sono stati replicati, il gruppo di consumatori non verrà replicato nel cluster di destinazione. Una volta che il gruppo di consumatori inizia a leggere i messaggi appena replicati, MSK Replicator replicherà automaticamente il gruppo di consumatori.

Nota

MSK Replicator ottimizza la sincronizzazione offset tra i gruppi di consumatori per consentire ai consumatori di leggere da quasi la fine della partizione dell'argomento. Se i tuoi gruppi di consumatori sono in ritardo rispetto al cluster di origine, potresti riscontrare un ritardo maggiore su quello di destinazione. Man mano che i consumatori recuperano il ritardo, MSK Replicator ridurrà automaticamente il ritardo.

La latenza di replica è elevata o continua ad aumentare

  1. Verifica di avere il numero corretto di partizioni. La tabella seguente mostra il numero minimo di partizioni consigliato per la velocità effettiva desiderata.

    Velocità di trasmissione effettiva e numero minimo consigliato di partizioni
    Throughput () MB/s Partizioni minime richieste
    50167
    100334
    250833
    5001666
    10003333
  2. Verifica di avere una capacità di lettura e scrittura sufficiente nei tuoi cluster. Il replicatore MSK funge da consumatore per il cluster di origine (uscita) e da produttore per il cluster di destinazione (ingresso). Fornisci la capacità del cluster per supportare il traffico di replica oltre ad altro traffico.

  3. La latenza di replica varia in base alla distanza tra le coppie di regioni.

  4. Verifica che il tuo Replicator non subisca limitazioni utilizzando la metrica. ThrottleTime Se è superiore a 0, modifica le quote di Kafka. Consulta Gestione del throughput con le quote Kafka.

  5. Consulta il AWS Service Health Dashboard per conoscere gli eventi del servizio MSK nella tua regione.

Risoluzione dei problemi utilizzando la metrica ReplicatorFailure

La ReplicatorFailure metrica consente di monitorare e rilevare i problemi di replica. Un valore diverso da zero indica in genere un errore di replica causato da limitazioni delle dimensioni dei messaggi, violazioni dell'intervallo di timestamp o problemi relativi alle dimensioni dei batch di record. Se la distribuzione dei log è configurata per il replicatore, è possibile utilizzare i messaggi di registro consegnati per identificare l'errore specifico. Per ulteriori dettagli, consultare Registri di MSK Replicator. Se la distribuzione dei log non è configurata, seguite i passaggi seguenti per interrogare l'argomento sullo stato del replicatore per individuare i messaggi di errore.

Se la ReplicatorFailure metrica riporta un valore diverso da zero, segui questi passaggi per risolvere il problema:

  1. Configura un client in grado di connettersi al cluster MSK di destinazione e che disponga degli strumenti CLI di Apache Kafka. Consulta Connect a un cluster Amazon MSK Provisioned.

  2. Apri la console Amazon MSK all'indirizzo? https://console.aws.amazon.com/msk/home region=us-east-1#/home/.

    Ottieni gli ARN di MSK Replicator e del cluster MSK di destinazione e ottieni gli endpoint broker del cluster MSK di destinazione. Ottieni i broker bootstrap utilizzando Console di gestione AWS

  3. Esporta l'ARN di MSK Replicator e gli endpoint del broker:

    export TARGET_CLUSTER_SERVER_STRING=<BootstrapServerString> export REPLICATOR_ARN=<ReplicatorARN> export CONSUMER_CONFIG_FILE=<ConsumerConfigFile>
  4. Nella tua <path-to-your-kafka-installation>/bin directory, salva il seguente script con nome. 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

    Esegui questo script per interrogare i messaggi di errore di 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

    Questo script genera tutti gli errori con i relativi messaggi di eccezione e le partizioni degli argomenti interessate. Poiché l'argomento contiene tutti i messaggi di errore cronologici, iniziate l'indagine utilizzando l'ultimo messaggio. Di seguito è riportato un esempio di messaggio di errore:

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

Di seguito vengono descritti i guasti più comuni di MSK Replicator e come mitigarli.

Dimensione del messaggio superiore a max.request.size

Causa: la dimensione del singolo messaggio supera i 10 MB (il valore massimo predefinito).

Di seguito è riportato un esempio di questo tipo di messaggio di errore.

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

Soluzione: riduci le dimensioni dei singoli messaggi nel tuo argomento. Se non riesci, segui le istruzioni per richiedere un aumento del limite.

Dimensione del messaggio superiore alla dimensione massima del messaggio che il server accetterà

Causa: la dimensione del messaggio supera la dimensione massima dei messaggi del cluster di destinazione.

Di seguito è riportato un esempio di questo tipo di messaggio di errore.

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

Soluzione: aumentare la max.message.bytes configurazione sul cluster o sull'argomento di destinazione. Vedi max.message.bytes.

Il timestamp non è compreso nell'intervallo

Causa: il timestamp del messaggio non rientra nell'intervallo consentito del cluster di destinazione.

Di seguito è riportato un esempio di questo tipo di messaggio di errore.

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

Soluzione: aggiornare la message.timestamp.before.max.ms configurazione del cluster di destinazione. Vedi message.timestamp.before.max.ms.

Batch di registrazione troppo grande

Causa: la dimensione del batch di record supera la dimensione del segmento impostata per l'argomento nel cluster di destinazione. MSK Replicator supporta una dimensione massima del batch di 1 MB.

Di seguito è riportato un esempio di questo tipo di messaggio di errore.

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

Soluzione: aggiorna i cluster di destinazione in segment.bytes modo che siano almeno 1048576 (1 MB). Vedi segment.bytes. https://kafka.apache.org/documentation/#topicconfigs_segment.bytes

Nota

Se la ReplicatorFailure metrica continua a emettere valori diversi da zero dopo aver applicato queste soluzioni, ripeti il processo di risoluzione dei problemi finché la metrica non emette un valore pari a zero.

Risolvi i problemi di replica da cluster Kafka autogestiti

MSK Replicator non è in grado di connettersi a un cluster Kafka autogestito

Esegui i seguenti controlli se MSK Replicator non è in grado di connettersi al cluster Kafka autogestito:

  1. Verifica che la tua connessione VPN o Direct Connect sia attiva e che le tabelle di routing siano corrette.

  2. Verifica che i gruppi di sicurezza consentano il traffico in entrata dalle sottoreti MSK Replicator sulla porta SASL_SSL (in genere 9096).

  3. Verifica la risoluzione DNS dal VPC ai nomi host dei broker di cluster autogestiti.

  4. Controlla la KafkaClusterPingSuccessCount metrica in Amazon CloudWatch : il valore 0 indica un errore di connettività.

SASL/SCRAM o errori di autenticazione MTLS

Se la AuthError metrica è diversa da zero o i log di Replicator mostrano errori MTLS: SASL/SCRAM

  1. Verifica che le credenziali archiviate in AWS Secrets Manager corrispondano alle credenziali utente SCRAM sul cluster autogestito (per SASL/SCRAM) o che il certificato client e la chiave privata siano corretti (per MTL).

  2. Verifica che l'utente SCRAM o il responsabile del certificato disponga delle autorizzazioni ACL richieste (Leggi, descrivi sugli argomenti; Leggi, descrivi sui gruppi di consumatori; Descrivi sul cluster).

  3. Controlla la AuthError metrica per confermare gli errori di autenticazione e identificare se il cluster di origine o di destinazione è interessato dall'uso della dimensione. ClusterAlias

SASL/OAUTHBEARER errori di autenticazione (OAuth)

Se la AuthError metrica è diversa da zero o i log di Replicator mostrano il recupero del token di accesso o gli errori: SASL/OAUTHBEARER

  1. Verifica che tokenEndpointUrl sia corretto, utilizzi lo schema HTTPS e sia raggiungibile dalle sottoreti VPC fornite per il Replicator. Un valore pari a 0 combinato con gli errori KafkaClusterPingSuccessCount dei token indica spesso che l'endpoint del token non è raggiungibile.

  2. Per quanto riguarda il meccanismo delle credenziali del client, verificate che gli client_id e client_secret in AWS Secrets Manager siano corretti e che il meccanismo di acquisizione dei token corrisponda a quanto previsto dal vostro IDP.

  3. Verifica che tokenEndpointAuthenticationMethod sia valido per il tuo meccanismo di acquisizione dei token. Il meccanismo delle credenziali del client richiede POST o BASIC e il meccanismo di asserzione delle credenziali del client richiede. NONE

  4. Per i meccanismi di asserzione delle credenziali del possessore e del client di IAM JWT, verifica che il ruolo di esecuzione del servizio disponga dell'sts:GetWebIdentityTokenautorizzazione e che audience e signingAlgorithm corrispondano a ciò che il tuo IDP si aspetta quando convalida il token.

  5. Se il tuo IDP utilizza una CA privata, verifica che il certificato CA a cui fa riferimento sia completo e valido. tokenEndpointTlsCertificateArn

  6. Verifica che l'entità Kafka a cui il tuo IDP associa il token di accesso disponga delle autorizzazioni ACL richieste da MSK Replicator sul cluster di origine.

  7. Controlla nei log di Replicator lo stato HTTP e il codice OAuth restituiti dall'endpoint del token. error MSK Replicator registra questi campi ma non registra mai il corpo di risposta dell'endpoint del token.

Problemi con i certificati SSL

Se il Replicator non è in grado di stabilire una connessione sicura al cluster autogestito:

  1. Verifica che il certificate valore in AWS Secrets Manager includa l'intera catena di certificati CA in formato PEM.

  2. Verifica che il listener SSL sia configurato su tutti i broker di cluster autogestiti.

  3. Verifica che il certificato non sia scaduto e sia emesso da una CA attendibile.

Errori di sincronizzazione dell'offset del gruppo di consumatori per i cluster autogestiti

Se gli offset dei gruppi di consumatori non vengono sincronizzati correttamente:

  1. Verifica la ConsumerGroupOffsetSyncFailure metrica: dovrebbe essere 0.

  2. Verifica che i gruppi di consumatori stiano consumando attivamente nel cluster di origine (i gruppi di consumatori inattivi potrebbero non essere sincronizzati).

  3. Per la replica bidirezionale, verifica che synchroniseConsumerGroupOffsets sia impostato su entrambi i replicatori. true