스냅샷을 사용한 애플리케이션 백업 관리 - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink는 이전에 Amazon Kinesis Data Analytics for Apache Flink로 알려졌습니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

스냅샷을 사용한 애플리케이션 백업 관리

스냅샷은 Apache Flink Savepoint를 구현한 Managed Service for Apache Flink입니다. 스냅샷은 사용자 또는 서비스에 의해 트리거, 생성, 관리되는 애플리케이션 상태 백업입니다. Apache Flink 세이브포인트에 대한 자세한 내용은 Apache Flink 설명서의 세이브포인트를 참조하십시오. 스냅샷을 사용하면 애플리케이션 상태의 특정 스냅샷에서 애플리케이션을 다시 시작할 수 있습니다.

참고

애플리케이션이 올바른 상태 데이터로 제대로 다시 시작하려면 하루에 여러 번 스냅샷을 생성하는 것이 좋습니다. 스냅샷의 올바른 주기는 애플리케이션의 비즈니스 로직에 따라 다릅니다. 스냅샷을 자주 생성하면 최신 데이터를 복구할 수 있지만 비용이 증가하고 더 많은 시스템 리소스가 필요합니다.

Apache Flink용 관리 서비스에서는 다음 작업을 사용하여 스냅샷을 관리합니다. API

스냅샷 수에 대한 애플리케이션별 한도는 아파치 플링크용 매니지드 서비스 및 스튜디오 노트북 할당량 섹션을 참조하세요. 애플리케이션이 스냅샷 한도에 도달한 경우 스냅샷을 수동으로 만들면 LimitExceededException 코드와 함께 실패합니다.

Managed Service for Apache Flink는 스냅샷을 절대 삭제하지 않습니다. DeleteApplicationSnapshot 작업을 사용하여 스냅샷을 수동으로 삭제해야 합니다.

애플리케이션을 시작할 때 애플리케이션 상태의 저장된 스냅샷을 로드하려면 StartApplication 또는 UpdateApplication 작업의 ApplicationRestoreConfiguration 파라미터를 사용하세요.

자동 스냅샷 생성 관리

애플리케이션에 대해 로 true 설정된 경우 SnapshotsEnabled Managed Service ApplicationSnapshotConfigurationfor Apache Flink는 애플리케이션이 업데이트, 확장 또는 중지될 때 스냅샷을 자동으로 생성하고 사용하여 정확히 한 번의 처리 시맨틱을 제공합니다.

참고

ApplicationSnapshotConfiguration::SnapshotsEnabledfalse로 설정하면 애플리케이션 업데이트 중에 데이터가 손실될 수 있습니다.

참고

Managed Service for Apache Flink는 스냅샷 생성 중에 중간 저장점을 트리거합니다. Flink 버전 1.15 이상에서는 중간 저장점이 더 이상 부작용을 일으키지 않습니다. 세이브포인트 트리거링을 참조하십시오.

자동으로 생성된 스냅샷의 품질은 다음과 같습니다.

  • 스냅샷은 서비스에서 관리하지만 작업을 사용하여 스냅샷을 볼 수 있습니다. ListApplicationSnapshots 자동으로 생성된 스냅샷은 스냅샷 한도 계산에 포함됩니다.

  • 애플리케이션이 스냅샷 한도를 초과하는 경우 수동으로 생성한 스냅샷은 실패하지만 Managed Service for Apache Flink 서비스는 애플리케이션이 업데이트, 확장 또는 중지될 때 여전히 스냅샷을 성공적으로 생성합니다. 수동으로 더 많은 스냅샷을 생성하기 전에 DeleteApplicationSnapshot작업을 사용하여 스냅샷을 수동으로 삭제해야 합니다.

호환되지 않는 상태 데이터가 포함된 스냅샷에서 복원

스냅샷에는 연산자에 대한 정보가 포함되어 있기 때문에 이전 애플리케이션 버전 이후 변경된 연산자의 스냅샷에서 상태 데이터를 복원하면 예상치 못한 결과가 발생할 수 있습니다. 현재 연산자에 해당하지 않는 스냅샷에서 상태 데이터를 복원하려고 시도하면 애플리케이션에 오류가 발생합니다. 오류가 발생한 애플리케이션은 STOPPING 또는 UPDATING 상태에서 멈춥니다.

응용 프로그램이 호환되지 않는 상태 데이터를 포함하는 스냅샷에서 복원할 수 있도록 FlinkRunConfiguration하려면 작업을 true 사용하여 의 AllowNonRestoredState 매개 변수를 로 설정합니다. UpdateApplication

더 이상 사용하지 않는 스냅샷에서 애플리케이션을 복원하면 다음과 같은 동작이 나타납니다.

  • 연산자 추가: 새 연산자가 추가된 경우 저장점에는 새 연산자에 대한 상태 데이터가 없습니다. 오류가 발생하지 않으며 AllowNonRestoredState를 설정할 필요도 없습니다.

  • 연산자 삭제: 기존 연산자가 삭제된 경우 저장점에는 누락된 연산자에 대한 상태 데이터가 있습니다. AllowNonRestoredStatetrue로 설정하지 않으면 오류가 발생합니다.

  • 연산자 수정: 파라미터 유형을 호환 가능한 유형으로 변경하는 등 호환되는 변경이 이루어진 경우 애플리케이션은 사용되지 않는 스냅샷에서 복원할 수 있습니다. 스냅샷에서 복원하는 방법에 대한 자세한 내용은 Apache Flink 설명서의 세이브포인트를 참조하십시오. Apache Flink 버전 1.8 이상을 사용하는 애플리케이션은 다른 스키마를 사용한 스냅샷에서 복원할 수 있습니다. Apache Flink 버전 1.6을 사용하는 애플리케이션은 복원할 수 없습니다. two-phase-commit 싱크의 경우 사용자가 만든 스냅샷 () 대신 시스템 스냅샷 (SW) 을 사용하는 것이 좋습니다. CreateApplicationSnapshot

    Flink의 경우 Managed Service for Apache Flink는 스냅샷 생성 중에 중간 저장점을 트리거합니다. Flink 1.15 이상 버전에서는 중간 저장점이 더 이상 부작용을 일으키지 않습니다. 저장점 트리거를 참조하세요.

기존 세이브포인트 데이터와 호환되지 않는 애플리케이션을 재개해야 하는 경우, 작업 파라미터를 로 설정하여 스냅샷에서의 복원을 건너뛰는 것이 좋습니다. ApplicationRestoreType StartApplicationSKIP_RESTORE_FROM_SNAPSHOT

Apache Flink가 병립될 수 없는 상태 데이터를 처리하는 방법에 대한 자세한 내용을 알아보려면 Apache Flink 설명서상태 스키마 개선을 참조하세요.

스냅샷 예제를 검토하세요. API

이 섹션에는 애플리케이션에서 스냅샷을 사용하기 위한 API 작업에 대한 예제 요청이 포함되어 있습니다. API작업 입력에 JSON 파일을 사용하는 방법에 대한 자세한 내용은 을 참조하십시오아파치 플링크용 매니지드 서비스 API 예제 코드.

응용 프로그램의 스냅샷을 활성화합니다.

UpdateApplication 작업을 위한 다음 예 요청은 애플리케이션에 대한 스냅샷을 활성화합니다.

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

스냅샷 생성

CreateApplicationSnapshot 작업을 위한 다음 예 요청은 현재 애플리케이션 상태의 스냅샷을 생성합니다.

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

애플리케이션의 스냅샷 목록

ListApplicationSnapshots 작업을 위한 다음 예 요청은 현재 애플리케이션 상태의 처음 50개 스냅샷이 나열합니다.

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

애플리케이션 스냅샷의 세부 정보 나열

DescribeApplicationSnapshot 작업을 위한 다음 예 요청은 애플리케이션 스냅샷에 대한 세부 정보를 나열합니다.

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

스냅샷 삭제

DeleteApplicationSnapshot 작업을 위한 다음 예 요청은 이전에 저장한 스냅샷을 삭제합니다. ListApplicationSnapshots 또는 DeleteApplicationSnapshot 다음 중 하나를 사용하여 SnapshotCreationTimestamp 값을 가져올 수 있습니다.

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

이름이 지정된 스냅샷을 사용하여 애플리케이션을 다시 시작합니다.

StartApplication 작업을 위한 다음 예 요청은 특정 스냅샷에 저장된 상태를 사용하여 애플리케이션을 시작합니다.

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

최신 스냅샷을 사용하여 애플리케이션 재시작

StartApplication작업을 위한 다음 예 요청은 가장 최근의 스냅샷을 사용하여 애플리케이션을 시작합니다.

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

스냅샷을 사용하지 않고 애플리케이션 재시작

StartApplication작업을 위한 다음 예 요청은 스냅샷이 있더라도 애플리케이션 상태를 로드하지 않고 애플리케이션을 시작합니다.

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