기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
KCL 2.x에서 KCL 3.x로 마이그레이션
이 주제에서는 소비자를 KCL 2.x에서 KCL 3.x로 마이그레이션하는 단계별 지침을 제공합니다. KCL 3.x는 KCL 2.x 소비자의 인플레이스 마이그레이션을 지원합니다. 워커를 롤링 방식으로 마이그레이션하면서 Kinesis 데이터 스트림의 데이터를 계속 사용할 수 있습니다.
중요
KCL 3.x는 KCL 2.x와 인터페이스와 메서드를 동일하게 유지합니다. 따라서 마이그레이션 중에 레코드 처리 코드를 업데이트할 필요가 없습니다. 그러나 적절한 구성을 설정하고 마이그레이션에 필요한 단계를 확인해야 합니다. 원활한 마이그레이션 경험을 위해 다음 마이그레이션 단계를 따르는 것이 좋습니다.
1단계: 사전 조건
KCL 3.x를 사용하여 시작하기 전에 다음이 있는지 확인합니다.
-
Java Development Kit(JDK) 8 이상
-
AWS SDK for Java2.x
-
종속성 관리를 위한 Maven 또는 Gradle
중요
KCL 3.x에서는 AWS SDK for Java버전 2.27.19~2.27.23을 사용하지 마십시오. 이러한 버전에는 KCL의 DynamoDB 사용과 관련된 예외 오류가 발생하는 문제가 포함되어 있습니다. 이 문제를 방지하려면 AWS SDK for Java버전 2.28.0 이상을 사용하는 것이 좋습니다.
2단계: 종속성 추가
Maven을 사용하는 경우 pom.xml 파일에 다음 종속성을 추가합니다. 3.x.x를 최신 KCL 버전으로 교체했는지 확인합니다.
<dependency> <groupId>software.amazon.kinesis</groupId> <artifactId>amazon-kinesis-client</artifactId> <version>3.x.x</version> <!-- Use the latest version --> </dependency>
Gradle을 사용하는 경우 build.gradle 파일에 다음을 추가합니다. 3.x.x를 최신 KCL 버전으로 교체했는지 확인합니다.
implementation 'software.amazon.kinesis:amazon-kinesis-client:3.x.x'
Maven Central Repository
3단계: 마이그레이션 관련 구성 설정
KCL 2.x에서 KCL 3.x로 마이그레이션하려면 다음 구성 파라미터를 설정해야 합니다.
-
CoordinatorConfig.clientVersionConfig: 이 구성은 애플리케이션을 실행할 KCL 버전 호환성 모드를 결정합니다. KCL 2.x에서 3.x로 마이그레이션할 때는 이 구성을
CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X로 설정해야 합니다. 이 구성을 설정하려면 스케줄러 객체를 생성할 때 다음 줄을 추가합니다.
configsBuilder.coordiantorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPLATIBLE_WITH_2X)
다음은 KCL 2.x에서 3.x로 마이그레이션하기 위해 CoordinatorConfig.clientVersionConfig를 설정하는 방법을 보여주는 예제입니다. 특정 요구 사항을 바탕으로 필요에 따라 다른 구성을 조정할 수 있습니다.
Scheduler scheduler = new Scheduler( configsBuilder.checkpointConfig(), configsBuilder.coordiantorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPLATIBLE_WITH_2X), configsBuilder.leaseManagementConfig(), configsBuilder.lifecycleConfig(), configsBuilder.metricsConfig(), configsBuilder.processorConfig(), configsBuilder.retrievalConfig() );
소비자 애플리케이션의 모든 워커가 특정 시점에 동일한 로드 밸런싱 알고리즘을 사용해야 합니다. KCL 2.x 및 3.x가 서로 다른 로드 밸런싱 알고리즘을 사용하기 때문입니다. 서로 다른 로드 밸런싱 알고리즘으로 워커를 실행하면 두 알고리즘이 독립적으로 작동하므로 로드 분산이 최적화되지 않을 수 있습니다.
이 KCL 2.x 호환성 설정을 사용하면 KCL 3.x 애플리케이션이 KCL 2.x와 호환되는 모드에서 실행되고, 소비자 애플리케이션의 모든 워커가 KCL 3.x로 업그레이드될 때까지 KCL 2.x에서 로드 밸런싱 알고리즘을 사용할 수 있습니다. 마이그레이션이 완료되면 KCL이 자동으로 전체 KCL 3.x 기능 모드로 전환하고 실행 중인 모든 워커에 대해 새 KCL 3.x 로드 밸런싱 알고리즘을 사용하기 시작합니다.
중요
ConfigsBuilder를 사용하지 않고 LeaseManagementConfig 객체를 생성하여 구성을 설정하는 경우 KCL 버전 3.x 이상에서 applicationName이라는 파라미터를 하나 더 추가해야 합니다. 자세한 내용은 Compilation error with the LeaseManagementConfig constructor 섹션을 참조하세요. ConfigsBuilder를 사용하여 KCL 구성을 설정하는 것이 좋습니다. ConfigsBuilder는 KCL 애플리케이션을 구성하는 더 유연하고 유지 관리 가능한 방법을 제공합니다.
4단계: shutdownRequested() 메서드 구현 모범 사례 준수
KCL 3.x는 리스가 리스 재할당 프로세스의 일부로 다른 워커에게 인계될 때 데이터의 재처리를 최소화하기 위해 정상적인 리스 핸드오프라는 기능을 도입합니다. 이는 리스 핸드오프 전에 리스 테이블에서 마지막으로 처리된 시퀀스 번호를 체크포인트하여 달성됩니다. 정상적인 리스 핸드오프가 제대로 작동하려면 RecordProcessor 클래스의 shutdownRequested 메서드 내에서 checkpointer 객체를 간접 호출해야 합니다. shutdownRequested 메서드 내에서 checkpointer 객체를 간접 호출하지 않는 경우 다음 예제와 같이 구현할 수 있습니다.
중요
-
다음 구현 예제는 정상적인 리스 핸드오프를 위한 최소 요구 사항입니다. 필요한 경우 체크포인트와 관련된 추가 로직을 포함하도록 확장할 수 있습니다. 비동기 처리를 수행하는 경우 체크포인트를 간접 호출하기 전에 다운스트림으로 전송된 모든 레코드가 처리되었는지 확인합니다.
-
정상적인 리스 핸드오프는 리스 전송 중 데이터 재처리 가능성을 대폭 줄여주지만 이러한 가능성을 완전히 제거하지는 않습니다. 데이터 무결성과 일관성을 유지하려면 다운스트림 소비자 애플리케이션을 멱등성이 있도록 설계합니다. 즉, 전체 시스템에 부정적인 영향을 주지 않으면서 잠재적인 중복 레코드 처리 문제를 처리할 수 있어야 합니다.
/** * Invoked when either Scheduler has been requested to gracefully shutdown * or lease ownership is being transferred gracefully so the current owner * gets one last chance to checkpoint. * * Checkpoints and logs the data a final time. * * @param shutdownRequestedInput Provides access to a checkpointer, allowing a record processor to checkpoint * before the shutdown is completed. */ public void shutdownRequested(ShutdownRequestedInput shutdownRequestedInput) { try { // Ensure that all delivered records are processed // and has been successfully flushed to the downstream before calling // checkpoint // If you are performing any asynchronous processing or flushing to // downstream, you must wait for its completion before invoking // the below checkpoint method. log.info("Scheduler is shutting down, checkpointing."); shutdownRequestedInput.checkpointer().checkpoint(); } catch (ShutdownException | InvalidStateException e) { log.error("Exception while checkpointing at requested shutdown. Giving up.", e); } }
5단계: 워커 지표 수집을 위한 KCL 3.x 사전 조건 확인
KCL 3.x는 워커의 CPU 사용률과 같은 CPU 사용률 지표를 수집하여 워커 간에 로드를 균등하게 분산합니다. 소비자 애플리케이션 워커는 Amazon EC2, Amazon ECS, Amazon EKS 또는 AWS Fargate에서 실행할 수 있습니다. KCL 3.x는 다음 사전 조건이 충족되는 경우에만 워커로부터 CPU 사용률 지표를 수집할 수 있습니다.
Amazon Elastic Compute Cloud(Amazon EC2)
-
운영 체제는 Linux OS여야 합니다.
-
EC2 인스턴스에서 IMDSv2를 활성화해야 합니다.
Amazon EC2의 Amazon Elastic Container Service(Amazon ECS)
-
운영 체제는 Linux OS여야 합니다.
-
ECS 작업 메타데이터 엔드포인트 버전 4를 활성화해야 합니다.
-
Amazon ECS 컨테이너 에이전트 버전은 1.39.0 이상이어야 합니다.
의 Amazon ECSAWS Fargate
-
Fargate 작업 메타데이터 엔드포인트 버전 4를 활성화해야 합니다. Fargate 플랫폼 버전 1.4.0 이상을 사용하는 경우 기본적으로 활성화됩니다.
-
Fargate 플랫폼 버전 1.4.0 이상.
Amazon EC2의 Amazon Elastic Kubernetes Service(Amazon EKS)
-
운영 체제는 Linux OS여야 합니다.
의 Amazon EKSAWS Fargate
-
Fargate 플랫폼 버전 1.3.0 이상.
중요
사전 조건이 충족되지 않아 KCL 3.x가 워커로부터 CPU 사용률 지표를 수집할 수 없는 경우, 리스당 처리량 수준의 로드가 재조정됩니다. 이 폴백 리밸런싱 메커니즘을 사용하면 모든 워커가 각 워커에게 할당된 리스에서 유사한 총 처리량 수준을 얻게 됩니다. 자세한 내용은 KCL이 워커에게 리스를 할당하고 로드의 균형을 조정하는 방법 단원을 참조하십시오.
6단계: KCL 3.x에 대한 IAM 권한 업데이트
KCL 3.x 소비자 애플리케이션과 연결된 IAM 역할 또는 정책에 다음 권한을 추가해야 합니다. 여기에는 KCL 애플리케이션에서 사용하는 기존 IAM 정책 업데이트가 포함됩니다. 자세한 내용은 KCL 소비자 애플리케이션에 필요한 IAM 권한 단원을 참조하십시오.
중요
기존 KCL 애플리케이션의 경우 KCL 2.x에서는 필요하지 않았기 때문에 IAM 정책에 다음 IAM 작업 및 리소스가 추가되지 않았을 수 있습니다. KCL 3.x 애플리케이션을 실행하기 전에 다음 항목을 추가했는지 확인합니다.
-
작업:
UpdateTable-
리소스(ARN):
arn:aws:dynamodb:region:account:table/KCLApplicationName
-
-
작업:
Query-
리소스(ARN):
arn:aws:dynamodb:region:account:table/KCLApplicationName/index/*
-
-
작업:
CreateTable,DescribeTable,Scan,GetItem,PutItem,UpdateItem,DeleteItem-
리소스(ARN):
arn:aws:dynamodb:region:account:table/KCLApplicationName-WorkerMetricStats,arn:aws:dynamodb:region:account:table/KCLApplicationName-CoordinatorState
ARNs의 "리전", "계정" 및 "KCLApplicationName"을 각각 자체AWS 리전, AWS 계정숫자 및 KCL 애플리케이션 이름으로 바꿉니다. 구성을 사용하여 KCL에서 생성한 메타데이터 테이블의 이름을 사용자 지정하는 경우 KCL 애플리케이션 이름 대신 지정된 테이블 이름을 사용합니다.
-
7단계: 워커에 KCL 3.x 코드 배포
마이그레이션에 필요한 구성을 설정하고 이전 마이그레이션 체크리스트를 모두 완료한 후 코드를 빌드하여 워커에게 배포할 수 있습니다.
참고
LeaseManagementConfig 생성자에 컴파일 오류가 표시되는 경우 문제 해결 정보는 Compilation error with the LeaseManagementConfig constructor 섹션을 참조하세요.
8단계: 마이그레이션 완료
KCL 3.x 코드를 배포하는 동안 KCL은 KCL 2.x의 리스 할당 알고리즘을 계속 사용합니다. 모든 워커에게 KCL 3.x 코드를 성공적으로 배포하면 KCL에서 이를 자동으로 감지하고 워커의 리소스 사용률을 기반으로 새 리스 할당 알고리즘으로 전환합니다. 새 리스 할당 알고리즘에 대한 자세한 내용은 KCL이 워커에게 리스를 할당하고 로드의 균형을 조정하는 방법 섹션을 참조하세요.
배포 중에 CloudWatch에 내보낸 다음 지표를 사용하여 마이그레이션 프로세스를 모니터링할 수 있습니다. Migration 작업에서 지표를 모니터링할 수 있습니다. 모든 지표는 KCL 애플리케이션별 지표이며 SUMMARY 지표 수준으로 설정됩니다. CurrentState:3xWorker 지표의 Sum 통계가 KCL 애플리케이션의 총 워커 수와 일치하면 KCL 3.x로의 마이그레이션이 성공적으로 완료된 것입니다.
중요
모든 워커가 새 리스 할당 알고리즘을 실행할 준비가 된 후, KCL이 새 리스 할당 알고리즘으로 전환하는 데 최소 10분이 걸립니다.
| Metrics | 설명 |
|---|---|
CurrentState:3xWorker |
성공적으로 KCL 3.x로 마이그레이션되고 새 리스 할당 알고리즘을 실행하는 KCL 워커 수입니다. 이 지표의
|
CurrentState:2xCompatibleWorker |
마이그레이션 프로세스 중에 KCL 2.x 호환 모드에서 실행되는 KCL 워커 수입니다. 이 지표의 값이 0이 아니면 마이그레이션이 아직 진행 중임을 나타냅니다.
|
Fault |
마이그레이션 프로세스 중에 발생한 예외 수입니다. 이러한 예외의 대부분은 일시적인 오류이며 KCL 3.x는 마이그레이션을 완료하기 위해 자동으로 재시도합니다. 영구
|
GsiStatusReady |
리스 테이블에서 글로벌 보조 인덱스(GSI) 생성의 상태입니다. 이 지표는 KCL 3.x를 실행하기 위한 사전 조건인 리스 테이블의 GSI 생성 여부를 나타냅니다. 값은 0 또는 1이며, 1은 생성 성공을 의미합니다. 롤백 상태에서는 이 지표가 내보내지지 않습니다. 다시 롤포워드한 후 이 지표의 모니터링을 재개할 수 있습니다.
|
workerMetricsReady |
모든 워커의 워커 지표 내보내기 상태입니다. 지표는 모든 워커가 CPU 사용률과 같은 지표를 내보내고 있는지 여부를 나타냅니다. 값은 0 또는 1이며, 1은 모든 워커가 지표를 성공적으로 내보내고 새 리스 할당 알고리즘을 사용할 준비가 되었음을 의미합니다. 롤백 상태에서는 이 지표가 내보내지지 않습니다. 다시 롤포워드한 후 이 지표의 모니터링을 재개할 수 있습니다.
|
KCL은 마이그레이션 중에 2.x 호환 모드로 롤백 기능을 제공합니다. KCL 3.x로 성공적으로 마이그레이션한 후에는 롤백이 더 이상 필요하지 않은 경우, CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X의 CoordinatorConfig.clientVersionConfig 설정을 제거하는 것이 좋습니다. 이 구성을 제거하면 KCL 애플리케이션에서 마이그레이션 관련 지표의 내보내기가 중지됩니다.
참고
마이그레이션 중 및 마이그레이션 완료 후 일정 기간 동안 애플리케이션의 성능과 안정성을 모니터링하는 것이 좋습니다. 문제가 발견되면 KCL 마이그레이션 도구