

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

# Flink 2.2로 업그레이드: 전체 가이드
<a name="flink-2-2-upgrade-guide"></a>

이 가이드에서는 Amazon Managed Service for Apache Flink 애플리케이션을 Flink 1.x에서 Flink 2.2로 업그레이드하기 위한 step-by-step 지침을 제공합니다. 이는 신중한 계획 및 테스트가 필요한 주요 버전 업그레이드입니다.

**메이저 버전 업그레이드는 단방향입니다.**  
업그레이드 작업은 상태 보존을 통해 애플리케이션을 Flink 1.x에서 2.2로 이동할 수 있지만 2.2 상태에서 2.2에서 1.x로 되돌릴 수는 없습니다. 업그레이드 후 애플리케이션이 비정상 상태가 되면 롤백 API를 사용하여 최신 스냅샷에서 원래 1.x 상태로 1.x 버전으로 돌아갑니다.

## 사전 조건
<a name="upgrade-guide-prerequisites"></a>

업그레이드를 시작하기 전에:
+ 검토 [주요 변경 사항 및 사용 중단](flink-2-2.md#flink-2-2-breaking-changes)
+ 검토 [Flink 2.2 업그레이드를 위한 상태 호환성 가이드](state-compatibility.md)
+ 테스트를 위한 비프로덕션 환경이 있는지 확인합니다.
+ 현재 애플리케이션 구성 및 종속성 문서화

## 마이그레이션 경로 이해
<a name="upgrade-guide-migration-paths"></a>

업그레이드 환경은 애플리케이션의 Flink 2.2와의 호환성에 따라 달라집니다. 이러한 경로를 이해하면 적절하게 준비하고 현실적인 기대치를 설정하는 데 도움이 됩니다.

**경로 1: 호환 가능한 바이너리 및 애플리케이션 상태**

**예상되는 사항:**
+ 업그레이드 작업 호출
+ 애플리케이션 상태 전환으로 2.2로 마이그레이션 완료: `RUNNING` → `UPDATING` → `RUNNING`
+ 데이터 손실 또는 재처리 없이 모든 애플리케이션 상태 보존
+ 마이너 버전 마이그레이션과 동일한 경험

가장 적합: 호환되는 직렬화를 사용하는 상태 비저장 애플리케이션 또는 애플리케이션(Avro, 호환되는 Protobuf 스키마, 컬렉션POJOs)

**경로 2: 이진 비호환성**

**예상되는 사항:**
+ 업그레이드 작업 호출
+ 작업이 실패하고 작업 API 및 로그를 통해 이진 비호환성을 표시합니다.
+ 자동 롤백이 활성화된 경우: 애플리케이션이 개입 없이 몇 분 내에 자동으로 롤백됩니다.
+ 자동 롤백이 비활성화된 경우: 애플리케이션이 데이터 처리 없이 실행 상태로 유지되고 수동으로 이전 버전으로 롤백합니다.
+ 바이너리가 수정되면 경로 1과 유사한 환경에 [UpdateApplication API](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)를 사용합니다.

가장 적합: Flink 작업 시작 중에 감지된 제거된 APIs 사용하는 애플리케이션

**경로 3: 호환되지 않는 애플리케이션 상태**

**예상되는 사항:**
+ 업그레이드 작업 호출
+ 마이그레이션이 처음에 성공하는 것처럼 보임
+ 상태 복원이 실패하면 애플리케이션이 몇 초 내에 재시작 루프에 들어갑니다.
+ 연속 재시작을 보여주는 CloudWatch 지표를 통해 장애 감지
+ 롤백 작업 수동 호출
+ 롤백을 시작한 후 몇 분 이내에 프로덕션으로 돌아갑니다.
+ [상태 마이그레이션](state-compatibility.md#state-compat-migration) 애플리케이션 검토

가장 적합: 상태 직렬화 비호환성이 있는 애플리케이션(컬렉션POJOs, 특정 Kryo 직렬화 상태)

**참고**  
프로덕션 애플리케이션에 대해 동일한 단계를 수행하기 전에 프로덕션 애플리케이션의 복제본을 생성하고 복제본에서 다음 각 업그레이드 단계를 테스트하는 것이 좋습니다.

## 1단계: 준비
<a name="upgrade-guide-phase-1"></a>

**애플리케이션 코드 업데이트**

Flink 2.2와 호환되도록 애플리케이션 코드를 업데이트합니다.
+ `pom.xml` 또는에서 **Flink 종속성을 버전 2.2.0으로 업데이트** `build.gradle`
+ **커넥터 종속성을 Flink 2.2 호환 버전으로 업데이트**( 참조[커넥터 가용성](flink-2-2.md#flink-2-2-connectors))
+ **더 이상 사용되지 않는 API 사용 제거**:
  + DataSet API를 DataStream API 또는 테이블 API/SQL로 교체
  + 레거시 `SourceFunction`/`SinkFunction`를 FLIP-27 소스 및 FLIP-143 싱크 APIs로 대체
  + Scala API 사용량을 Java API로 바꾸기
+ **Java 17로 업데이트**

**업데이트된 애플리케이션 코드 업로드**
+ Flink 2.2 종속성을 사용하여 애플리케이션 JAR 빌드
+ 현재 JAR과 **다른 파일 이름으로** Amazon S3에 업로드(예: `my-app-flink-2.2.jar`)
+ 업그레이드 단계에서 사용할 S3 버킷 및 키 기록

## 2단계: 자동 롤백 활성화
<a name="upgrade-guide-phase-2"></a>

자동 롤백을 사용하면 업그레이드에 실패할 경우 Amazon Managed Service for Apache Flink가 자동으로 이전 버전으로 되돌릴 수 있습니다.

**자동 롤백 상태 확인**

*AWS Management Console:*

1. 애플리케이션으로 이동

1. **구성** 선택

1. **애플리케이션 설정**에서 **시스템 롤백**이 활성화되어 있는지 확인합니다.

*AWS CLI:*

```
aws kinesisanalyticsv2 describe-application \
    --application-name MyApplication \
    --query 'ApplicationDetail.ApplicationConfigurationDescription.ApplicationSystemRollbackConfigurationDescription.RollbackEnabled'
```

**자동 롤백 활성화(활성화되지 않은 경우)**

```
aws kinesisanalyticsv2 update-application \
    --application-name MyApplication \
    --current-application-version-id <version-id> \
    --application-configuration-update '{
        "ApplicationSystemRollbackConfigurationUpdate": {
            "RollbackEnabledUpdate": true
        }
    }'
```

## 3단계: 스냅샷 생성(선택 사항)
<a name="upgrade-guide-phase-3"></a>

애플리케이션에 자동 스냅샷이 활성화된 경우이 단계를 건너뛰고, 그렇지 않으면 업그레이드하기 전에 애플리케이션의 스냅샷을 생성하여 애플리케이션의 상태를 저장할 수 있습니다.

**실행 중인 애플리케이션에서 스냅샷 생성**

*AWS Management Console:*

1. 애플리케이션으로 이동

1. **스냅샷** 선택

1. **스냅샷 생성을** 선택합니다.

1. 스냅샷 이름 입력(예: `pre-flink-2.2-upgrade`)

1. **생성**을 선택합니다.

*AWS CLI:*

```
aws kinesisanalyticsv2 create-application-snapshot \
    --application-name MyApplication \
    --snapshot-name pre-flink-2.2-upgrade
```

**스냅샷 생성 확인**

```
aws kinesisanalyticsv2 describe-application-snapshot \
    --application-name MyApplication \
    --snapshot-name pre-flink-2.2-upgrade
```

계속하기 `READY` 전에 `SnapshotStatus`가 될 때까지 기다립니다.

## 4단계: 애플리케이션 업그레이드
<a name="upgrade-guide-phase-4"></a>

[https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html) 작업을 사용하여 Flink 애플리케이션을 업그레이드할 수 있습니다.

`UpdateApplication` API는 다음과 같은 여러 가지 방식으로 직접적으로 호출할 수 있습니다.
+ ** AWS Management Console을 사용합니다.**
  +  AWS Management Console에서 앱 페이지로 이동합니다.
  + **구성**을 선택합니다.
  + 새 런타임과 복원 구성이라고도 하는 시작하려는 스냅샷을 선택합니다. 최신 스냅샷에서 앱을 시작하려면 최신 설정을 복원 구성으로 사용합니다. Amazon S3에 있는 새로 업그레이드된 애플리케이션 JAR/zip 파일을 지정합니다.
+ [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kinesisanalyticsv2/update-application.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kinesisanalyticsv2/update-application.html) 작업을 **사용합니다 AWS CLI**.
+ **를 사용합니다 CloudFormation.**
  + `RuntimeEnvironment` 필드를 업데이트합니다. 이전에는 CloudFormation 이 애플리케이션을 삭제한 뒤 새로 생성하여 스냅샷과 기타 앱 기록이 손실되었습니다. 이제 `RuntimeEnvironment`가 현재를 CloudFormation 업데이트하고 애플리케이션을 삭제하지 않습니다.
+ ** AWS SDK를 사용합니다.**
  + 원하는 프로그래밍 언어의 SDK 설명서를 참조하세요. [https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)을(를) 참조하세요.

애플리케이션이 `RUNNING` 상태이거나 `READY` 상태로 중지된 경우 업그레이드를 수행할 수 있습니다. Amazon Managed Service for Apache Flink는 원래 런타임 버전과 대상 런타임 버전 간의 호환성을 검증합니다. 이 호환성 검사는 상태`UpdateApplication`일 때를 수행하거나 `RUNNING` 상태일 때 업그레이드할 `StartApplication` 때 실행됩니다`READY`.

**실행 중 상태에서 업그레이드**

```
aws kinesisanalyticsv2 update-application \
    --application-name MyApplication \
    --current-application-version-id <version-id> \
    --runtime-environment-update FLINK-2_2 \
    --application-configuration-update '{
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "FileKeyUpdate": "my-app-flink-2.2.jar"
                }
            }
        }
    }'
```

**READY 상태에서 업그레이드**

```
aws kinesisanalyticsv2 update-application \
    --application-name MyApplication \
    --current-application-version-id <version-id> \
    --runtime-environment-update FLINK-2_2 \
    --application-configuration-update '{
        "ApplicationCodeConfigurationUpdate": {
            "CodeContentUpdate": {
                "S3ContentLocationUpdate": {
                    "FileKeyUpdate": "my-app-flink-2.2.jar"
                }
            }
        }
    }'
```

## 5단계: 업그레이드 모니터링
<a name="upgrade-guide-phase-5"></a>

**호환성 검사**
+ 작업 API를 사용하여 업그레이드 상태를 확인합니다. 이진 비호환성 또는 작업 시작 문제가 있는 경우 로그와 함께 업그레이드 작업이 실패합니다.
+ 업그레이드 작업이 성공했지만 애플리케이션이 재시작 루프에 멈춘 경우 상태가 새 Flink 버전과 호환되지 않거나 업데이트된 코드에 문제가 있는 것입니다. 상태 비호환성 문제를 식별하는 [Flink 2.2 업그레이드를 위한 상태 호환성 가이드](state-compatibility.md) 방법을 검토합니다.

**애플리케이션 상태 모니터링**

*애플리케이션 상태:*
+ 애플리케이션 상태가 전환되어야 함: `RUNNING` → `UPDATING` → `RUNNING`
+ 애플리케이션의 런타임을 확인합니다. 2.2인 경우 업그레이드 작업이 성공한 것입니다.
+ 애플리케이션이에 `RUNNING` 있지만 여전히 이전 런타임에 있는 경우 자동 롤백이 시작되었습니다. 작업 API는 작업을 로 표시합니다`FAILED`. 로그를 확인하여 실패에 대한 예외를 찾습니다.

또한 CloudWatch에서 이러한 지표를 모니터링합니다.

*지표 다시 시작:*
+ `numRestarts`: 예기치 않은 재시작 모니터링 -가 0이고 `uptime` 또는 `numRestarts`가 증가하는 경우 업그레이드`runningTime`가 성공합니다.

*체크포인트 지표:*
+ `lastCheckpointDuration`: 업그레이드 전 값과 유사해야 합니다.
+ `numberOfFailedCheckpoints`: 0을 유지해야 합니다.

## 6단계: 애플리케이션 동작 검증
<a name="upgrade-guide-phase-6"></a>

애플리케이션이 Flink 2.2에서 실행된 후:

**기능 검증**
+ 소스에서 데이터를 읽고 있는지 확인
+ 싱크에 데이터가 기록되고 있는지 확인
+ 비즈니스 로직이 예상 결과를 생성하는지 확인
+ 출력과 업그레이드 전 기준 비교

**성능 검증**
+ 지연 시간 지표 모니터링(end-to-end 처리 시간)
+ 처리량 지표 모니터링(초당 레코드 수)
+ 체크포인트 기간 및 크기 모니터링
+ 메모리 및 CPU 사용률 모니터링

**24시간 이상 실행**

다음을 보장하기 위해 프로덕션 환경에서 최소 24시간 동안 애플리케이션을 실행하도록 허용합니다.
+ 메모리 누수 없음
+ 안정적인 체크포인트 동작
+ 예기치 않은 재시작 없음
+ 일관된 처리량

## 7단계: 롤백 절차
<a name="upgrade-guide-phase-7"></a>

업그레이드에 실패하거나 애플리케이션이 실행 중이지만 비정상인 경우 이전 버전으로 롤백합니다.

**자동 롤백**

자동 롤백이 활성화되어 있고 시작 중에 업그레이드가 실패하면 Amazon Managed Service for Apache Flink가 자동으로 이전 버전으로 돌아갑니다.

**수동 롤백**

애플리케이션이 실행 중이지만 비정상인 경우 `RollbackApplication` API를 사용합니다.

*AWS Management Console:*

1. 애플리케이션으로 이동

1. **작업** → **롤백**을 선택합니다.

1. 롤백 확인

*AWS CLI:*

```
aws kinesisanalyticsv2 rollback-application \
    --application-name MyApplication \
    --current-application-version-id <version-id>
```

**롤백 중에 발생하는 일:**
+ 애플리케이션 중지
+ 런타임이 이전 Flink 버전으로 되돌림
+ 애플리케이션 코드가 이전 JAR로 되돌림
+ 업그레이드 **전에** 마지막으로 성공한 스냅샷에서 애플리케이션이 다시 시작됩니다.

**중요**  
Flink 1.x에서는 Flink 2.2 스냅샷을 복원할 수 없습니다.
롤백은 업그레이드 전에 생성된 스냅샷을 사용합니다.
업그레이드하기 전에 항상 스냅샷 생성(3단계)

## 다음 단계
<a name="upgrade-guide-next-steps"></a>

업그레이드 중 질문이나 문제는 섹션을 참조[Managed Service for Apache Flink 문제 해결](troubleshooting.md)하거나 AWS Support에 문의하세요.