Bonnes pratiques en matière de performances - 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.

Bonnes pratiques en matière de performances

Cette section décrit les considérations spéciales relatives à la conception d'une application axée sur les performances.

Gérer correctement la mise à l'échelle

Cette section contient des informations sur la gestion de la mise à l’échelle au niveau de l'application et au niveau de l'opérateur.

Gérer correctement la mise à l’échelle des applications

Vous pouvez utiliser la mise à l’autoscaling pour gérer les pics inattendus d'activité des applications. Les KPU de votre application augmenteront automatiquement si les critères suivants sont réunis :

  • L’autoscaling est activé pour l'application.

  • L'utilisation du processeur reste supérieure à 75 % pendant 15 minutes.

Si l’autoscaling est activé, mais que l'utilisation du processeur ne reste pas à ce seuil, l'application n'augmentera pas les KPU. Si vous constatez un pic d'utilisation du processeur qui n'atteint pas ce seuil, ou un pic lié à une métrique d'utilisation différente, par exemple heapMemoryUtilization, augmentez la mise à l’échelle manuellement pour permettre à votre application de gérer les pics d'activité.

Note

Si l'application a automatiquement ajouté des ressources supplémentaires par le biais de l’autoscaling, l'application libérera les nouvelles ressources après une période d'inactivité. La réduction des ressources affectera temporairement les performances.

Pour plus d'informations sur la mise à l’échelle, consultez Mise à l'échelle.

Gérez correctement la mise à l’échelle des opérateurs

Vous pouvez améliorer les performances de votre application en vérifiant que la charge de travail de votre application est répartie uniformément entre les processus de travail et que les opérateurs de votre application disposent des ressources système dont ils ont besoin pour être stables et performants.

Vous pouvez définir le parallélisme pour chaque opérateur du code de votre application à l'aide du paramètre parallelism. Si vous ne définissez pas le parallélisme pour un opérateur, celui-ci utilisera le paramètre de parallélisme au niveau de l'application. Les opérateurs qui utilisent le paramètre de parallélisme au niveau de l'application peuvent potentiellement utiliser toutes les ressources système disponibles pour l'application, ce qui la rend instable.

Pour déterminer au mieux le parallélisme de chaque opérateur, considérez les besoins relatifs en ressources de l'opérateur par rapport aux autres opérateurs de l'application. Définissez un paramètre de parallélisme des opérateurs plus gourmands en ressources pour les opérateurs plus gourmands que pour les opérateurs moins gourmands.

Le parallélisme total des opérateurs de l'application est la somme du parallélisme de tous les opérateurs de l'application. Vous ajustez le parallélisme total des opérateurs pour votre application en déterminant le meilleur rapport entre celui-ci et le nombre total d’emplacements de tâches disponibles pour votre application. Un rapport stable typique entre le parallélisme total des opérateurs et les emplacements de tâches est de 4:1, c'est-à-dire que l'application dispose d'un emplacement de tâches disponible pour quatre sous-tâches d'opérateur disponibles. Une application avec des opérateurs plus gourmands en ressources peut avoir besoin d'un ratio de 3:1 ou 2:1, tandis qu'une application avec des opérateurs moins gourmands en ressources peut être stable avec un ratio de 10:1.

Vous pouvez définir le ratio pour l'opérateur à l’aide de Propriétés d'exécution, afin de pouvoir ajuster le parallélisme de l'opérateur sans compiler ni télécharger le code de votre application.

L'exemple de code suivant montre comment définir le parallélisme des opérateurs en tant que ratio réglable du parallélisme de l'application actuelle :

Map<String, Properties> applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties(); operatorParallelism = StreamExecutionEnvironment.getParallelism() / Integer.getInteger( applicationProperties.get("OperatorProperties").getProperty("MyOperatorParallelismRatio") );

Pour plus d'informations sur les sous-tâches, les emplacements de tâches et les autres ressources de l'application, consultez Ressources d'application.

Pour contrôler la répartition de la charge de travail entre les processus de travail de votre application, utilisez le paramètre Parallelism et la méthode de partition KeyBy. Pour plus d'informations, consultez les rubriques suivantes dans la documentation Apache Flink :

Surveiller l'utilisation des ressources de dépendance externe

En cas de problème de performance dans une destination (telle que Kinesis Streams, Kinesis Data Firehose, DynamoDB ou OpenSearch Service), votre application subira une contre-pression. Vérifiez que vos dépendances externes sont correctement configurées pour le débit de votre application.

Note

Les échecs d'autres services peuvent entraîner des défaillances dans votre application. Si vous constatez des échecs dans votre application, consultez les journaux CloudWatch de vos services de destination pour détecter les échecs.

Exécuter votre application Apache Flink localement

Pour résoudre les problèmes de mémoire, vous pouvez exécuter votre application dans une installation locale de Flink. Cela vous donnera accès à des outils de débogage tels que la trace de pile et le vidage de tas, qui ne sont pas disponibles lors de l'exécution de votre application dans le service géré pour Apache Flink.

Pour plus d'informations sur la création d'une installation locale de Flink, consultez Local Setup Tutorial dans la documentation Apache Flink.