Gestion des sauvegardes d'applications à l'aide de snapshots - 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.

Gestion des sauvegardes d'applications à l'aide de snapshots

Un instantané est l’implémentation d’un point de sauvegarde Apache Flink par le service géré pour Apache Flink. Un instantané est une sauvegarde de l’état de l’application déclenchée, créée et gérée par un utilisateur ou un service. Pour plus d'informations sur les points de sauvegarde d'Apache Flink, consultez la section Points de sauvegarde de la documentation d'Apache Flink. À l'aide des instantanés, vous pouvez redémarrer une application à partir d'un instantané spécifique de l'état de l'application.

Note

Nous recommandons que votre application crée un instantané plusieurs fois par jour pour redémarrer correctement avec des données d’état correctes. La fréquence correcte pour vos instantanés dépend de la logique métier de votre application. La prise de snapshots fréquents vous permet de récupérer des données plus récentes, mais cela augmente les coûts et nécessite davantage de ressources système.

Dans le service géré pour Apache Flink, vous pouvez gérer les instantanés à l’aide des actions API suivantes :

Pour connaître la limite du nombre d’instantanés par application, consultez Quota. Si votre application atteint la limite d’intantanés, la création manuelle d’un instantané échoue avec une LimitExceededException.

Le service géré pour Apache Flink ne supprime jamais les instantanés. Vous devez supprimer les instantanés manuellement à l’aide de l’action DeleteApplicationSnapshot.

Pour charger un instantané enregistré de l’état de l’application lors du démarrage d’une application, utilisez le paramètre ApplicationRestoreConfiguration de l’action StartApplication ou UpdateApplication.

Création automatique d'instantanés

Si SnapshotsEnabled ce paramètre est défini sur ApplicationSnapshotConfigurationpour l'application, Managed Service for Apache Flink crée et utilise automatiquement des instantanés lorsque l'application est mise à jour, redimensionnée ou arrêtée afin de fournir une sémantique de traitement unique. true

Note

La définition de ApplicationSnapshotConfiguration::SnapshotsEnabled sur false entraînera une perte de données lors des mises à jour de l’application.

Note

Le service géré pour Apache Flink déclenche des points de sauvegarde intermédiaires lors de la création automatique d’instantanés. Pour la version 1.15 ou ultérieure de Flink, les points de sauvegarde intermédiaires ne provoquent plus d’effets secondaires. Voir Déclenchement de points de sauvegarde.

Les instantanés créés automatiquement présentent les qualités suivantes :

  • L'instantané est géré par le service, mais vous pouvez le voir à l'aide de l' ListApplicationSnapshotsaction. Les instantanés créés automatiquement sont pris en compte dans votre limite d’instantanés.

  • Si votre application dépasse la limite d’instantanés, les instantanés créés manuellement échoueront, mais le service géré pour Apache Flink créera toujours des instantanés lorsque l’application sera mise à jour, mise à l’échelle ou arrêtée. Vous devez supprimer manuellement les instantanés à l'aide de cette DeleteApplicationSnapshotaction avant de créer d'autres instantanés manuellement.

Restauration à partir d'un instantané contenant des données d'état incompatibles

Les instantanés contenant des informations sur les opérateurs, la restauration des données d’état à partir d’un instantané d’un opérateur qui a changé depuis la version précédente de l’application peut avoir des résultats inattendus. Une application rencontrera un échec si elle tente de restaurer les données d’état à partir d’un instantané qui ne correspond pas à l’opérateur actuel. De plus, l’application sera bloquée à l’état STOPPING ou UPDATING.

Pour autoriser une application à effectuer une restauration à partir d'un instantané contenant des données d'état incompatibles, définissez le AllowNonRestoredState paramètre de FlinkRunConfigurationà à à l'trueaide de l'UpdateApplicationaction.

Vous constaterez le comportement suivant lorsqu’une application est restaurée à partir d’un instantané obsolète :

  • Opérateur ajouté : si un nouvel opérateur est ajouté, le point de sauvegarde ne contient aucune donnée d’état pour le nouvel opérateur. Aucun défaut ne se produira et il n’est pas nécessaire de définir AllowNonRestoredState.

  • Opérateur supprimé : si un opérateur existant est supprimé, le point de sauvegarde contient les données d’état de l’opérateur manquant. Une erreur se produira à moins que AllowNonRestoredState ne soit défini sur true.

  • Modifié par l’opérateur : si des modifications compatibles sont apportées, telles que le remplacement du type d’un paramètre par un type compatible, l’application peut effectuer une restauration à partir de l’instantané obsolète. Pour plus d'informations sur la restauration à partir de snapshots, consultez la section Savepoints dans la documentation d'Apache Flink. Une application qui utilise Apache Flink version 1.8 ou ultérieure peut éventuellement être restaurée à partir d’un instantané avec un schéma différent. Une application qui utilise Apache Flink version 1.6 ne peut pas être restaurée. Pour les two-phase-commit récepteurs, nous recommandons d'utiliser un instantané du système (SwS) au lieu d'un instantané créé par l'utilisateur (CreateApplicationSnapshot).

    Pour Flink, le service géré pour Apache Flink déclenche des points de sauvegarde intermédiaires lors de la création automatique d’instantanés. À partir de la version 1.15 de Flink, les points de sauvegarde intermédiaires ne provoquent plus d’effets secondaires. Consultez Triggering savepoints.

Si vous devez reprendre une application incompatible avec les données de point de sauvegarde existantes, nous vous recommandons d'ignorer la restauration à partir de l'instantané en définissant le ApplicationRestoreType paramètre de l'StartApplicationaction sur. SKIP_RESTORE_FROM_SNAPSHOT

Pour plus d’informations sur la façon dont Apache Flink gère les données d’état incompatibles, consultez State Schema Evolution dans la documentation Apache Flink.

Exemples d'API Snapshot

Cette section inclut des exemples de demandes d’actions d’API pour utiliser des instantanés avec une application. Pour obtenir des informations sur l’utilisation d’un fichier JSON comme entrée pour une action d’API, consultez Exemple de code de service géré pour l'API Apache Flink.

Activer les instantanés pour une application

L’exemple de demande suivant pour l’action UpdateApplication active les instantanés pour une application :

{ "ApplicationName": "MyApplication", "CurrentApplicationVersionId": 1, "ApplicationConfigurationUpdate": { "ApplicationSnapshotConfigurationUpdate": { "SnapshotsEnabledUpdate": "true" } } }

Créer un instantané

L’exemple de code de demande suivant pour l’action CreateApplicationSnapshot crée un instantané de l’état actuel de l’application :

{ "ApplicationName": "MyApplication", "SnapshotName": "MyCustomSnapshot" }

Répertorier les instantanés d'une application

L’exemple de code de demande suivant pour l’action ListApplicationSnapshots répertorie les 50 premiers instantanés de l’état actuel de l’application :

{ "ApplicationName": "MyApplication", "Limit": 50 }

Afficher les détails d'un instantané d'application

L’exemple de demande suivant pour l’action DescribeApplicationSnapshot répertorie les informations spécifiques à un instantané d’application :

{ "ApplicationName": "MyApplication", "SnapshotName": "MyCustomSnapshot" }

Suppression d’un instantané

L’exemple de demande d’action DeleteApplicationSnapshot suivant supprime un instantané précédemment enregistré. Vous pouvez obtenir la valeur SnapshotCreationTimestamp en utilisant ListApplicationSnapshots ou DeleteApplicationSnapshot :

{ "ApplicationName": "MyApplication", "SnapshotName": "MyCustomSnapshot", "SnapshotCreationTimestamp": 12345678901.0, }

Redémarrer une application à l'aide d'un instantané nommé

L’exemple de demande d’action StartApplication suivant démarre l’application en utilisant l’état enregistré à partir d’un instantané spécifique :

{ "ApplicationName": "MyApplication", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_CUSTOM_SNAPSHOT", "SnapshotName": "MyCustomSnapshot" } } }

Redémarrer une application à l'aide de l'instantané le plus récent

L’exemple de demande d’action StartApplication suivant démarre l’application en utilisant l’instantané le plus récent :

{ "ApplicationName": "MyApplication", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT" } } }

Redémarrer une application sans capture instantanée

L’exemple de demande d’action StartApplication suivant démarre l’application sans charger l’état de l’application, même si un instantané est présent :

{ "ApplicationName": "MyApplication", "RunConfiguration": { "ApplicationRestoreConfiguration": { "ApplicationRestoreType": "SKIP_RESTORE_FROM_SNAPSHOT" } } }