Amazon Managed Service for Apache Flink(Amazon MSF)는 이전에 Amazon Kinesis Data Analytics for Apache Flink로 알려져 있었습니다.
Managed Service for Apache Flink 애플리케이션으로 프로덕션 준비 상태 확보
Managed Service for Apache Flink에서 프로덕션 애플리케이션을 실행하는 데 있어 중요한 측면을 모아 놓은 것입니다. 전체 목록은 아니지만 애플리케이션을 프로덕션에 적용하기 전에 주의해야 할 최소한의 사항만 나열한 것입니다.
애플리케이션 부하 테스트
애플리케이션 관련 일부 문제는 부하가 심한 경우에만 나타납니다. 애플리케이션 상태가 정상으로 보였지만 작동 이벤트로 인해 애플리케이션의 부하가 크게 증폭되는 사례가 있었습니다. 이는 애플리케이션 자체와는 완전히 무관하게 발생할 수 있습니다. 데이터 소스 또는 데이터 싱크를 몇 시간 동안 사용할 수 없으면 Flink 애플리케이션을 진행할 수 없습니다. 이 문제가 해결되면 처리되지 않은 데이터가 쌓여 가용 리소스가 완전히 고갈될 수 있습니다. 그러면 부하로 인해 이전에 발생하지 않았던 버그나 성능 문제가 증폭될 수 있습니다.
따라서 프로덕션 애플리케이션을 위한 적절한 부하 테스트를 실행하는 것이 중요합니다. 이러한 부하 테스트 중에 답변해야 하는 질문은 다음과 같습니다.
지속적인 고부하 상태에서도 애플리케이션이 안정적입니까?
최대 부하 상태에서도 애플리케이션이 저장점을 가져갈 수 있나요?
1시간의 백로그를 처리하는 데 얼마나 걸리나요? 그리고 24시간은 얼마나 걸리나요(스트림에 있는 데이터의 최대 보존 기간에 따라 다름)?
애플리케이션을 확장하면 애플리케이션 처리량이 증가하나요?
데이터 스트림에서 소비하는 경우 일정 시간 동안 스트림으로 생성하여 이러한 시나리오를 시뮬레이션할 수 있습니다. 그런 다음 애플리케이션을 시작하여 처음부터 데이터를 소비하도록 합니다. 예를 들어 Kinesis 데이터 스트림의 경우 시작 위치로 TRIM_HORIZON을 사용합니다.
최대 병렬 처리 정의
최대 병렬 처리는 상태 기반 애플리케이션이 스케일링할 수 있는 최대 병렬 처리를 정의합니다. 이는 상태가 처음 생성될 때 정의되며 상태를 삭제하지 않고 이 최대값 이상으로 연산자를 확장할 수 있는 방법은 없습니다.
최대 병렬 처리는 상태가 처음 생성될 때 설정됩니다.
기본적인 최대 병렬 처리 설정은 다음과 같습니다.
병렬 처리가 128 미만인 경우 128
MIN(nextPowerOfTwo(parallelism + (parallelism / 2)), 2^15): 병렬 처리가 128을 초과하는 경우
애플리케이션을 128 병렬 처리 이상으로 규모 조정하려는 경우 최대 병렬 처리를 명시적으로 정의해야 합니다.
최대 병렬 처리는 애플리케이션 수준에서 env.setMaxParallelism(x) 또는 단일 연산자를 사용하여 정의할 수 있습니다. 다르게 지정하지 않는 한 모든 연산자는 애플리케이션의 최대 병렬 처리를 상속합니다.
자세한 내용은 Flink 설명서의 최대 병렬 처리 설정
모든 연산자에 대해 UUID 설정
UUID는 Flink가 저장점을 개별 연산자에 다시 매핑하는 작업에 사용됩니다. 각 연산자에 대해 특정 UUID를 설정하면 복원할 저장점 프로세스를 안정적으로 매핑할 수 있습니다.
.map(...).uid("my-map-function")
자세한 내용을 알아보려면 프로덕션 준비 체크리스트