애플리케이션 수명주기
애플리케이션 수명주기 (Application Lifecycle)
Flink에서 애플리케이션(Application)은 실행을 위한 사용자 정의 로직의 한 조각을 나타내요. 사용자 main() 메서드의 실행 상태를 추적하고 이와 연관된 작업(job)들을 관리하기 위한 통합된 추상화를 제공해요. 자세한 내용은 FLIP-549와 FLIP-560을 참고해요.
출처: 문서
본문
Cluster-Application-Job 아키텍처 (Cluster-Application-Job Architecture)
Flink는 이제 Cluster-Application-Job 3계층 구조를 사용해요. 이 구조는 서로 다른 배포 모드를 통합하고 사용자 로직 실행의 관찰 가능성과 관리성을 제공해요. 클러스터는 두 가지 모드로 동작할 수 있어요:
- Application Mode: 애플리케이션당 하나의 클러스터
- Session Mode: 여러 애플리케이션을 위한 하나의 클러스터
애플리케이션은 0~N개의 작업을 포함할 수 있으며, 각 작업은 정확히 하나의 애플리케이션과 연결돼요.
애플리케이션 구현 (Application Implementations)
AbstractApplication은 모든 애플리케이션의 기본 클래스예요. Flink는 두 가지 구체 구현을 제공해요:
- PackagedProgramApplication: 사용자 JAR을 감싸고 그
main()메서드를 실행해요. Application Mode 또는/jars/:jarid/run-application을 통한 REST 제출이 있는 Session Mode에 적합해요. 애플리케이션의 수명주기는 사용자main()메서드의 실행에 묶여요. - SingleJobApplication: 단일 작업 제출을 가벼운
main()메서드로 감싸요. Session Mode에서 CLI 제출과 같이 단일 작업을 제출하는 경우에 적합해요. 애플리케이션 수명주기는 작업의 실행 상태에 묶여요.
애플리케이션 상태 (Application Status)
애플리케이션은 created 상태로 시작하고, 실행이 시작되면 running으로 전환돼요. 실행이 정상적으로 완료되고 애플리케이션과 연결된 모든 작업이 종료 상태에 도달하면 애플리케이션은 finished로 전환돼요. 실패가 발생하면 애플리케이션은 먼저 failing으로 전환되어 모든 비종료 작업을 취소해요. 모든 작업이 종료 상태에 도달한 후 애플리케이션은 failed로 전환돼요.
사용자가 애플리케이션을 취소하면 canceling 상태로 들어가요. 이는 모든 비종료 작업의 취소를 수반해요. 모든 작업이 종료 상태에 도달하면 애플리케이션은 canceled 상태로 전환돼요.
finished, canceled, failed 상태는 종료 상태이며 애플리케이션에 대한 보관(archiving)과 정리 동작을 트리거해요.
애플리케이션 제출 (Application Submission)
애플리케이션은 배포 모드와 제출 방법에 따라 서로 다른 메커니즘으로 클러스터에 제출되고 실행을 시작해요.
Application Mode에서는 클러스터가 단일 애플리케이션을 위해 특별히 시작돼요. 클러스터 시작 중에 사용자 JAR 파일로부터 PackagedProgramApplication이 자동으로 생성돼요. 애플리케이션은 클러스터가 준비된 직후 실행을 시작하며, 수명주기는 사용자 main() 메서드의 실행에 묶여요.
Session Mode에서는 여러 애플리케이션이 같은 클러스터를 공유할 수 있어요. 애플리케이션은 다양한 인터페이스로 제출할 수 있어요:
- REST API (
/jars/:jarid/run-application): 이 엔드포인트는 업로드된 사용자 JAR에서 PackagedProgramApplication을 만들어 실행을 시작해요. Application Mode와 마찬가지로 애플리케이션의 수명주기는 사용자main()메서드에 묶여요. - REST API (
/jars/:jarid/run) 및 CLI 제출: 이 인터페이스들은 사용자main()메서드를 직접 실행해요. 메서드가execute()를 호출해 작업을 제출하면 작업은 SingleJobApplication으로 감싸져요. 이 경우 애플리케이션 수명주기는 작업의 실행 상태에 묶여 단일 작업 제출을 위한 가벼운 래퍼가 돼요.
Dispatcher는 클러스터의 모든 애플리케이션을 관리해요. 애플리케이션 상태 조회, 애플리케이션 수명주기 관리, 취소 및 복구 같은 작업 처리 인터페이스를 제공해요.