Gerenciando backups de aplicativos usando instantâneos - Managed Service for Apache Flink

Anteriormente, o Amazon Managed Service for Apache Flink era conhecido como Amazon Kinesis Data Analytics for Apache Flink.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Gerenciando backups de aplicativos usando instantâneos

Um snapshot é a implementação Managed Service for Apache Flink de um Ponto de salvamento do Apache Flink. Um instantâneo é um backup do estado do aplicativo acionado, criado e gerenciado pelo usuário ou serviço. Para obter informações sobre os Savepoints do Apache Flink, consulte Savepoints na documentação do Apache Flink. Usando instantâneos, você pode reiniciar um aplicativo a partir de um instantâneo específico do estado do aplicativo.

nota

Recomendamos que seu aplicativo crie um instantâneo várias vezes ao dia para reiniciar adequadamente com os dados de estado corretos. A frequência correta para seus instantâneos depende da lógica de negócios do seu aplicativo. Tirar instantâneos com frequência permite recuperar dados mais recentes, mas aumenta os custos e exige mais recursos do sistema.

No Managed Service for Apache Flink, você gerencia snapshots usando as seguintes ações de API:

Para saber o limite do número de snapshots por aplicativo, consulte Quota. Se seu aplicativo atingir o limite de snapshots, a criação manual de um snapshot falhará com um LimitExceededException.

O Managed Service for Apache Flink nunca exclui snapshots. Será necessário excluir manualmente seus snapshots usando a ação DeleteApplicationSnapshot.

Para carregar um snapshot salvo do estado do aplicativo ao iniciar um aplicativo, use o parâmetro ApplicationRestoreConfiguration da ação StartApplication ou UpdateApplication.

Criação automática de instantâneos

Se SnapshotsEnabled estiver definido como true no ApplicationSnapshotConfigurationpara o aplicativo, o Managed Service for Apache Flink cria e usa automaticamente instantâneos quando o aplicativo é atualizado, escalado ou interrompido para fornecer uma semântica de processamento exatamente uma vez.

nota

Definir ApplicationSnapshotConfiguration::SnapshotsEnabled como false levará à perda de dados durante as atualizações do aplicativo.

nota

O Managed Service for Apache Flink aciona pontos de salvamento intermediários durante a criação do snapshot. Para a versão 1.15 ou superior do Flink, os pontos de salvamento intermediários não causam mais efeitos secundários. Consulte Acionamento de pontos de salvamento.

Os snapshots criados automaticamente têm as seguintes qualidades:

  • O instantâneo é gerenciado pelo serviço, mas você pode ver o instantâneo usando a ListApplicationSnapshotsação. Os snapshots criados automaticamente são contabilizados no seu limite de snapshots.

  • Se seu aplicativo exceder o limite de snapshots, os snapshots criados manualmente falharão, mas o serviço Managed Service for Apache Flink ainda criará snapshots com êxito quando o aplicativo for atualizado, escalado ou interrompido. Você deve excluir manualmente os instantâneos usando a DeleteApplicationSnapshotação antes de criar mais instantâneos manualmente.

Restaurando a partir de um snapshot que contém dados de estado incompatíveis

Como os snapshots contêm informações sobre operadores, a restauração dos dados de estado de um snapshot para um operador que foi alterado desde a versão anterior do aplicativo pode ter resultados inesperados. Um aplicativo falhará se tentar restaurar dados de estado de um snapshot que não corresponda ao operador atual. O aplicativo com falha ficará preso no estado STOPPING ou UPDATING.

Para permitir que um aplicativo restaure a partir de um snapshot que contém dados de estado incompatíveis, defina o AllowNonRestoredState parâmetro do FlinkRunConfigurationpara true usar a UpdateApplicationação.

Você verá o seguinte comportamento quando um aplicativo for restaurado a partir de um snapshot obsoleto:

  • Operador adicionado: se um novo operador for adicionado, o ponto de salvamento não terá dados de estado para o novo operador. Nenhuma falha ocorrerá e não é necessário configurar AllowNonRestoredState.

  • Operador excluído: se um operador existente for excluído, o ponto de salvamento terá dados de estado do operador ausente. Ocorrerá uma falha, a menos que AllowNonRestoredState esteja configurada comotrue.

  • Operador modificado: se forem feitas alterações compatíveis, como alterar o tipo de um parâmetro para um tipo compatível, o aplicativo poderá restaurar a partir do snapshot obsoleto. Para obter mais informações sobre restauração a partir de instantâneos, consulte Savepoints na documentação do Apache Flink. Um aplicativo que usa o Apache Flink versão 1.8 ou posterior pode ser restaurado a partir de um snapshot com um esquema diferente. Um aplicativo que usa o Apache Flink versão 1.6 não pode ser restaurado. Para two-phase-commit coletores, recomendamos usar o snapshot do sistema (SWs) em vez do snapshot criado pelo usuário (). CreateApplicationSnapshot

    Para Flink, o Managed Service for Apache Flink aciona pontos de salvamento intermediários durante a criação do snapshot. Para o Flink 1.15 ou superior, os pontos de salvamento intermediários não causam mais efeitos secundários. Consulte Acionamento de pontos de salvamento.

Se você precisar retomar um aplicativo incompatível com os dados existentes do ponto de salvamento, recomendamos que você ignore a restauração a partir do snapshot definindo o parâmetro da ApplicationRestoreType ação como. StartApplicationSKIP_RESTORE_FROM_SNAPSHOT

Para obter mais informações sobre como o Apache Flink lida com dados de estado incompatíveis, consulte Evolução do esquema do estado na Documentação do Apache Flink.

Exemplos da API Snapshot

Esta seção inclui exemplos de solicitações de ações de API para usar snapshot com um aplicativo. Para obter informações sobre como usar um arquivo JSON como entrada de uma ação da API, consulte Código de exemplo do Managed Service for Apache Flink API.

Habilitar instantâneos para um aplicativo

O exemplo de solicitação a seguir para a ação UpdateApplication habilita snapshots para um aplicativo:

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

Criar um snapshot

O exemplo de solicitação da ação CreateApplicationSnapshot a seguir cria um snapshot do estado atual do aplicativo:

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

Listar instantâneos de um aplicativo

O exemplo de solicitação da ação ListApplicationSnapshots a seguir lista os primeiros 50 snapshots do estado atual do aplicativo:

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

Listar detalhes de um instantâneo do aplicativo

O exemplo de solicitação a seguir para a ação DescribeApplicationSnapshot lista detalhes de um snapshot de aplicativo específico:

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

Excluir um snapshot

O exemplo de solicitação da ação DeleteApplicationSnapshot a seguir exclui um snapshot salvo anteriormente. Você pode obter o valor SnapshotCreationTimestamp usando um ListApplicationSnapshots ou DeleteApplicationSnapshot:

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

Reinicie um aplicativo usando um snapshot nomeado

O exemplo a seguir de solicitação para a ação StartApplication inicia o aplicativo usando o estado salvo de um snapshot específico:

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

Reinicie um aplicativo usando o snapshot mais recente

O exemplo de solicitação para a ação StartApplication a seguir inicia o aplicativo usando o snapshot mais recente:

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

Reinicie um aplicativo sem tirar um instantâneo

O exemplo de solicitação para a ação StartApplication a seguir inicia o aplicativo sem carregar o estado do aplicativo, mesmo que um snapshot esteja presente:

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