L'application redémarre - Service géré pour Apache Flink

Le service géré Amazon pour Apache Flink était auparavant connu sous le nom d’Amazon Kinesis Data Analytics pour Apache Flink.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

L'application redémarre

Si votre application n’est pas saine, sa tâche Apache Flink échoue et redémarre continuellement. Cette section décrit les symptômes et les étapes de résolution de ce problème.

Symptômes

Ce problème peut présenter les symptômes suivants :

  • La métrique FullRestarts n’est pas nulle. Cette métrique représente le nombre de fois où la tâche de l’application a été redémarrée depuis que vous l’avez lancée.

  • La métrique Downtime n’est pas nulle. Cette métrique représente le nombre de millisecondes pendant lesquelles l’application est à l’état FAILING ou RESTARTING.

  • Le journal des applications contient les passages à l’état RESTARTING ou FAILED. Vous pouvez interroger le journal de votre application pour ces changements de statut à l'aide de la requête CloudWatch Logs Insights suivante :Analyser les erreurs : défaillances liées aux tâches de l'application.

Causes et solutions

Les conditions suivantes peuvent rendre votre application instable et provoquer des redémarrages répétés :

  • L'opérateur lance une exception : si une exception d'un opérateur de votre application n'est pas gérée, l'application bascule (en interprétant que l'échec ne peut pas être géré par l'opérateur). L’application redémarre à partir du dernier point de contrôle afin de conserver la sémantique de traitement unique. Par conséquent, la valeur Downtime n’est pas nulle pendant ces périodes de redémarrage. Pour éviter que cela ne se produise, nous vous recommandons de gérer toutes les exceptions réessayables dans le code de l’application.

    Vous pouvez rechercher les causes de cette situation en interrogeant les journaux de votre application pour vérifier si l’état de votre application est passé de RUNNING à FAILED. Pour plus d’informations, consultez Analyser les erreurs : défaillances liées aux tâches de l'application.

  • Les flux de données Kinesis ne sont pas correctement provisionnés : si la source ou le récepteur de votre application est un flux de données Kinesis, vérifiez si les métriques du flux ne contiennent pas d'erreurs. ReadProvisionedThroughputExceeded WriteProvisionedThroughputExceeded

    Si ces erreurs s’affichent, vous pouvez augmenter le débit disponible pour le flux Kinesis en augmentant le nombre de partitions du flux. Pour plus d’informations, consultez la rubrique Comment modifier le nombre de partitions ouvertes dans Kinesis Data Streams ?

  • Les autres sources ou récepteurs ne sont pas correctement provisionnés ou disponibles : vérifiez que votre application provisionne correctement les sources et les récepteurs. Vérifiez que les sources ou les récepteurs utilisés dans l'application (tels que les autres AWS services ou les sources ou destinations externes) sont bien approvisionnés, ne sont pas limités en lecture ou en écriture ou sont régulièrement indisponibles.

    Si vous rencontrez des problèmes de débit avec vos services dépendants, augmentez les ressources disponibles pour ces services ou recherchez la cause des erreurs ou indisponibilités.

  • Les opérateurs ne sont pas correctement provisionnés : si la charge de travail sur les threads de l’un des opérateurs de votre application n’est pas correctement répartie, l’opérateur peut être surchargé et l’application peut se bloquer. Pour obtenir des informations sur le réglage du parallélisme des opérateurs, consultez Gérez correctement la mise à l’échelle des opérateurs.

  • L'application échoue avec DaemonException : Cette erreur apparaît dans le journal de votre application si vous utilisez une version d'Apache Flink antérieure à la version 1.11. Vous devrez peut-être effectuer une mise à niveau vers une version ultérieure d’Apache Flink afin d’utiliser une version KPL 0.14 ou ultérieure.

  • L'application échoue avec TimeoutException FlinkException, ou RemoteTransportException : Ces erreurs peuvent apparaître dans le journal de votre application si vos gestionnaires de tâches tombent en panne. Si votre application est surchargée, vos gestionnaires de tâches peuvent être soumis à une pression sur les ressources du processeur ou de la mémoire, ce qui peut entraîner leur échec.

    Ces erreurs peuvent se présenter comme suit :

    • 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

    Pour résoudre ce problème, vérifiez les points suivants :

    • Vérifiez vos CloudWatch indicateurs pour détecter des pics inhabituels d'utilisation du processeur ou de la mémoire.

    • Vérifiez que votre application ne présente aucun problème de débit. Pour plus d’informations, consultez Résoudre les problèmes de performances.

    • Examinez le journal de votre application pour détecter les exceptions non gérées générées par le code de votre application.

  • L'application échoue avec l'erreur JaxbAnnotationModule Not Found : cette erreur se produit si votre application utilise Apache Beam, mais ne possède pas les dépendances ou versions de dépendances correctes. Les applications du service géré pour Apache Flink qui utilisent Apache Beam doivent utiliser les versions de dépendances suivantes :

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

    Si vous ne fournissez pas la bonne version de jackson-module-jaxb-annotations en tant que dépendance explicite, votre application la charge à partir des dépendances de l’environnement, et comme les versions ne correspondent pas, l’application se bloque au moment de l’exécution.

    Pour plus d’informations sur l’utilisation d’Apache Beam avec le service géré pour Apache Flink, consultez Utilisation CloudFormation avec le service géré pour Apache Flink.

  • L’application échoue avec java.io.IOException : nombre insuffisant de tampons réseau

    Cela se produit lorsqu’une application ne dispose pas de mémoire suffisante pour les tampons réseau. Les tampons réseau facilitent la communication entre les sous-tâches. Ils sont utilisés pour stocker des enregistrements avant leur transmission sur un réseau et pour stocker les données entrantes avant de les disséquer en enregistrements et de les transmettre à des sous-tâches. Le nombre de tampons réseau requis varie directement en fonction du parallélisme et de la complexité de votre graphique de tâches. Il existe plusieurs approches pour atténuer ce problème :

    • Vous pouvez configurer une valeur parallelismPerKpu inférieure pour augmenter la quantité de mémoire allouée par sous-tâche et par mémoire tampon réseau. Notez que la réduction de la valeur parallelismPerKpu augmentera le nombre d’unités KPU et donc le coût. Pour éviter cela, vous pouvez conserver la même quantité d’unités KPU en réduisant le parallélisme du même facteur.

    • Vous pouvez simplifier votre graphe de tâches en réduisant le nombre d’opérateurs ou en créant des chaînes afin de réduire le nombre de tampons nécessaires.

    • Sinon, vous pouvez vous rendre sur https://aws.amazon.com/premiumsupport/ pour une configuration personnalisée de la mémoire tampon réseau.