L'applicazione si sta riavviando - Servizio gestito per Apache Flink

Il servizio gestito da Amazon per Apache Flink era precedentemente noto come Analisi dei dati Amazon Kinesis per Apache Flink.

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

L'applicazione si sta riavviando

Se l'applicazione non è integra, il processo Apache Flink non riesce e si riavvia continuamente. Questa sezione descrive i sintomi e le procedure di risoluzione dei problemi relativi a questa condizione.

Caratteristiche

Questa condizione può avere i seguenti sintomi:

  • La metrica FullRestarts non è zero. Questa metrica rappresenta il numero di volte in cui il lavoro dell'applicazione è stato riavviato dall'avvio dell'applicazione.

  • La metrica Downtime non è zero. Questa metrica rappresenta il numero di millisecondi in cui l'applicazione si trova nello stato FAILING o RESTARTING.

  • Il log dell'applicazione contiene le modifiche allo stato RESTARTING o FAILED. È possibile interrogare il registro dell'applicazione per queste modifiche di stato utilizzando la seguente query CloudWatch Logs Insights:. Analizza gli errori: errori relativi alle attività dell'applicazione

Cause e soluzioni

Le seguenti condizioni possono causare l'instabilità e il riavvio ripetuto dell'applicazione:

  • L'operatore genera un'eccezione: se un'eccezione in un operatore dell'applicazione non viene gestita, l'applicazione fallisce (interpretando che l'errore non può essere gestito dall'operatore). L'applicazione si riavvia dal checkpoint più recente per mantenere la semantica di elaborazione singola. Di conseguenza, Downtime non è zero durante questi periodi di riavvio. Per evitare che ciò accada, si consiglia di gestire eventuali eccezioni riutilizzabili nel codice dell'applicazione.

    È possibile esaminare le cause di questa condizione interrogando i log dell'applicazione per verificare eventuali modifiche allo stato dell'applicazione da RUNNING a FAILED. Per ulteriori informazioni, consulta Analizza gli errori: errori relativi alle attività dell'applicazione.

  • Il provisioning dei flussi di dati Kinesis non è corretto: se una fonte o un sink per l'applicazione è un flusso di dati Kinesis, controlla le metriche relative allo stream per verificare la presenza di errori. ReadProvisionedThroughputExceeded WriteProvisionedThroughputExceeded

    Se visualizzi questi errori, puoi aumentare il throughput disponibile per il flusso Kinesis aumentando il numero di partizioni del flusso. Per ulteriori informazioni, consulta Come posso modificare il numero di partizioni aperte nei flussi di dati Kinesis?

  • Altre origini o sink non vengono forniti correttamente o non sono disponibili: verifica che l'applicazione stia fornendo correttamente origini e sink. Verifica che tutte le fonti o i sink utilizzati nell'applicazione (come altri AWS servizi o fonti o destinazioni esterne) siano ben forniti, che non siano soggetti a limitazioni di lettura o scrittura o che non siano periodicamente non disponibili.

    Se riscontri problemi relativi al throughput con i servizi dipendenti, aumenta le risorse disponibili per tali servizi o investiga la causa di eventuali errori o indisponibilità.

  • Gli operatori non vengono forniti correttamente: se il carico di lavoro sui thread di uno degli operatori dell'applicazione non è distribuito correttamente, l'operatore può sovraccaricarsi e l'applicazione può arrestarsi in modo anomalo. Per informazioni sulla regolazione del parallelismo degli operatori, consulta Gestire correttamente il dimensionamento degli operatori.

  • L'applicazione fallisce con DaemonException: questo errore viene visualizzato nel registro dell'applicazione se si utilizza una versione di Apache Flink precedente alla 1.11. Potrebbe essere necessario eseguire l'aggiornamento a una versione successiva di Apache Flink in modo da utilizzare una versione KPL 0.14 o successiva.

  • L'applicazione fallisce con TimeoutException FlinkException, o RemoteTransportException: Questi errori possono comparire nel registro dell'applicazione se i task manager si bloccano. Se l'applicazione è sovraccarica, i task manager possono subire un carico eccessivo sulla CPU o sulle risorse di memoria, con conseguenti errori.

    Questi errori possono essere simili ai seguenti:

    • java.util.concurrent.TimeoutException: The heartbeat of JobManager with id xxx timed out

    • org.apache.flink.util.FlinkException: The assigned slot xxx was removed

    • org.apache.flink.runtime.io.network.netty.exception.RemoteTransportException: Connection unexpectedly closed by remote task manager

    Per risolvere questa condizione, verifica quanto segue:

    • Controlla le tue CloudWatch metriche per rilevare picchi insoliti nell'utilizzo della CPU o della memoria.

    • Controlla se l'applicazione presenta problemi di throughput. Per ulteriori informazioni, consulta Risolvi i problemi relativi alle prestazioni.

    • Esamina il log dell'applicazione per individuare eventuali eccezioni non gestite che il codice della tua applicazione sta generando.

  • L'applicazione fallisce con l'errore JaxbAnnotationModule Not Found: questo errore si verifica se l'applicazione utilizza Apache Beam, ma non ha le dipendenze o le versioni di dipendenza corrette. Le applicazioni del servizio gestito Apache Flink che utilizzano Apache Beam devoni utilizzare le seguenti versioni delle dipendenze:

    <jackson.version>2.10.2</jackson.version> ... <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jaxb-annotations</artifactId> <version>2.10.2</version> </dependency>

    Se non fornisci la versione corretta di jackson-module-jaxb-annotations come dipendenza esplicita, l'applicazione la carica dalle dipendenze dell'ambiente e, poiché le versioni non corrispondono, l'applicazione si blocca in fase di runtime.

    Per maggiori informazioni sull'utilizzo di Apache Beam con il servizio gestito per Apache Flink, consulta Usa CloudFormation.

  • L'applicazione fallisce con java.io.IOException: numero insufficiente di buffer di rete

    Ciò accade quando un'applicazione non dispone di memoria sufficiente per i buffer di rete. I buffer di rete facilitano la comunicazione tra le sottoattività. Vengono utilizzati per archiviare i record prima della trasmissione su una rete e per archiviare i dati in entrata prima di suddividerli in record e consegnarli a sottoattività. Il numero di buffer di rete richiesti varia direttamente in base al parallelismo e alla complessità del grafico di processo. Esistono diversi approcci per mitigare questo problema:

    • È possibile configurarne un parallelismPerKpu più basso in modo da aumentare le memoria allocata per sottoattività e buffer di rete. Tieni presente che una riduzione parallelismPerKpu aumenterà la KPU e quindi i costi. Per evitare ciò, puoi mantenere la stessa quantità di KPU riducendo il parallelismo per uno stesso fattore.

    • È possibile semplificare il grafico di processo riducendo il numero di operatori o concatenandoli in modo da ridurre il numero di buffer necessari.

    • Altrimenti, puoi contattare https://aws.amazon.com/premiumsupport/ per richiedere una configurazione personalizzata dei buffer di rete.