Administración de copias de seguridad de aplicaciones con instantáneas - Managed Service para Apache Flink

Amazon Managed Service para Apache Flink Amazon (Amazon MSF) se denominaba anteriormente Amazon Kinesis Data Analytics para Apache Flink.

Administración de copias de seguridad de aplicaciones con instantáneas

Una instantánea es la implementación de Managed Service para Apache Flink en un punto de guardado de Apache Flink. Una instantánea es una copia de seguridad del estado de la aplicación activada, creada y gestionada por el usuario o el servicio. Para obtener información sobre los puntos de guardado de Apache Flink, consulte Savepoints en la documentación de Apache Flink. Con las instantáneas, se puede reiniciar una aplicación a partir de una instantánea concreta del estado de la aplicación.

nota

Se recomienda que la aplicación cree una instantánea varias veces al día para que se reinicie correctamente con los datos de estado correctos. La frecuencia correcta de las instantáneas depende de la lógica de negocios de la aplicación. Tomar instantáneas frecuentes permite recuperar datos más recientes, pero aumenta el costo y requiere más recursos del sistema.

En Managed Service para Apache Flink, las instantáneas se administran mediante las siguientes acciones de la API:

Para conocer el límite en el número de instantáneas por aplicación, consulte Cuota de cuadernos de Managed Service para Apache Flink y cuadernos de Studio. Si la aplicación alcanza el límite de instantáneas, la creación manual de una instantánea produce un error con una LimitExceededException.

Managed Service para Apache Flink nunca borra las instantáneas. Usted debe eliminar las instantáneas manualmente usando la acción DeleteApplicationSnapshot.

Para cargar una instantánea guardada del estado de la aplicación al iniciar una aplicación, utilice el parámetro ApplicationRestoreConfiguration de la acción StartApplication o UpdateApplication.

Administración de creación de instantáneas automáticas

Si SnapshotsEnabled se establece en true en ApplicationSnapshotConfiguration para la aplicación, Managed Service para Apache Flink crea y usa instantáneas automáticamente cuando la aplicación se actualiza, escala o detiene para proporcionar una semántica de procesamiento de una sola vez.

nota

Si ApplicationSnapshotConfiguration::SnapshotsEnabled se establece en false, se perderán datos durante las actualizaciones de la aplicación.

nota

Managed Service para Apache Flink activa puntos de guardado intermedios durante la creación de instantáneas. En la versión 1.15 o superior de Flink, los puntos de guardado intermedios ya no producen efectos secundarios. Consulte Triggering Savepoints.

Las instantáneas creadas automáticamente tienen las siguientes cualidades:

  • El servicio gestiona la instantánea, pero usted puede verla mediante la acción ListApplicationSnapshots. Las instantáneas creadas automáticamente se tienen en cuenta para el límite de instantáneas.

  • Si la aplicación supera el límite de instantáneas, las instantáneas creadas manualmente fallarán, pero el servicio Managed Service para Apache Flink seguirá creando las instantáneas correctamente cuando la aplicación se actualice, escale o detenga. Debe eliminar manualmente las instantáneas mediante la acción DeleteApplicationSnapshot antes de crear más instantáneas de forma manual.

Restauración de una instantánea que contiene datos de estado incompatibles

Como las instantáneas contienen información sobre los operadores, la restauración de los datos de estado de una instantánea para un operador que ha cambiado desde la versión anterior de la aplicación puede tener resultados inesperados. Una aplicación fallará si intenta restaurar los datos de estado de una instantánea que no corresponde al operador actual. La aplicación con errores se bloqueará en el estado STOPPING o UPDATING.

Para permitir que una aplicación se restaure a partir de una instantánea que contiene datos de estado incompatibles, establezca el parámetro AllowNonRestoredState de FlinkRunConfiguration en true mediante la acción UpdateApplication.

Verá el siguiente comportamiento cuando se restaure una aplicación a partir de una instantánea obsoleta:

  • Operador agregado: si se agrega un operador nuevo, el punto de guardado no tiene datos de estado para el nuevo operador. No se producirá ningún error y no es necesario establecer AllowNonRestoredState.

  • Operador eliminado: si se elimina un operador existente, el punto de guardado contiene los datos de estado del operador que falta. Se producirá un error a menos que AllowNonRestoredState se establezca en true.

  • Operador modificado: si se realizan cambios compatibles, como cambiar el tipo de un parámetro por uno compatible, la aplicación puede realizar la restauración a partir de la instantánea obsoleta. Para obtener más información sobre la restauración a partir de instantáneas, consulte Savepoints en la documentación de Apache Flink. Es posible restaurar una aplicación que utiliza la versión 1.8 o posterior de Apache Flink a partir de una instantánea con un esquema diferente. No se puede restaurar una aplicación que utilice la versión 1.6 de Apache Flink. Para los receptores de confirmación en dos fases, recomendamos utilizar una instantánea del sistema (SwS) en lugar de una instantánea creada por el usuario (CreateApplicationSnapshot).

    En el caso de Flink, Managed Service para Apache Flink activa puntos de guardado intermedios durante la creación de la instantánea. A partir de la versión 1.15 de Flink, los puntos de guardado intermedios ya no producen efectos secundarios. Consulte Triggering Savepoints.

Si necesita reanudar una aplicación que no es compatible con los datos de puntos de guardado existentes, se recomienda que omita la restauración a partir de la instantánea estableciendo el parámetro ApplicationRestoreType de la acción StartApplication en SKIP_RESTORE_FROM_SNAPSHOT.

Para obtener más información sobre cómo Apache Flink trata los datos de estado incompatibles, consulte State Schema Evolution en la documentación de Apache Flink.

Revisión de ejemplos de la API de instantáneas

En esta sección se incluyen solicitudes de ejemplo de acciones de API para usar instantáneas con una aplicación. Para obtener información sobre cómo utilizar un archivo JSON como entrada para una acción de API, consulte Ejemplo de código de API de Managed Service para Apache Flink.

Habilitación de las instantáneas para una aplicación

La siguiente solicitud de ejemplo de la acción UpdateApplication habilita las instantáneas para una aplicación:

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

Crear una instantánea

La siguiente solicitud de ejemplo de la acción CreateApplicationSnapshot crea una instantánea del estado actual de la aplicación:

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

Lista de instantáneas de una aplicación

La siguiente solicitud de ejemplo de la acción ListApplicationSnapshots muestra las 50 primeras instantáneas del estado actual de la aplicación:

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

Lista de detalles de la instantánea de una aplicación

En la siguiente solicitud de ejemplo de la acción DescribeApplicationSnapshot se muestran los detalles de una instantánea específica de una aplicación:

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

Eliminar una instantánea

La siguiente solicitud de ejemplo de la acción DeleteApplicationSnapshot elimina una instantánea guardada anteriormente. Se puede obtener el valor de SnapshotCreationTimestamp usando ListApplicationSnapshots o DeleteApplicationSnapshot:

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

Reinicio de una aplicación usando una instantánea con nombre

La siguiente solicitud de ejemplo de la acción StartApplication inicia la aplicación utilizando el estado guardado de una instantánea específica:

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

Reinicio de una aplicación usando la instantánea más reciente

La siguiente solicitud de ejemplo de la acción StartApplication inicia la aplicación usando la instantánea más reciente:

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

Reinicio de una aplicación sin utilizar ninguna instantánea

La siguiente solicitud de ejemplo de la acción StartApplication inicia la aplicación sin cargar el estado de la aplicación, incluso si está presente una instantánea:

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