고가용성
고가용성 (High Availability)
JobManager 고가용성(HA)은 JobManager 장애로부터 Flink 클러스터를 보호해요. 이 기능 덕분에 장애 시점에 실행 중이던 제출된 애플리케이션을 Flink 클러스터가 항상 다시 실행한다는 것을 보장해요. 복구 후 장애 전에 실행 중이던 애플리케이션의 작업은 최신 체크포인트에서 다시 시작되거나(FAILED 상태로 전환 후 정리되며) 포기될 수 있어요.
출처: 문서
본문
JobManager 고가용성 (JobManager High Availability)
JobManager는 모든 Flink 배포를 조정해요. 스케줄링(scheduling)과 리소스 관리(resource management)를 모두 담당해요. 기본적으로 Flink 클러스터당 JobManager 인스턴스는 하나뿐이에요. 이는 단일 장애점(SPOF, single point of failure)을 만드는데, JobManager가 충돌하면 새 프로그램을 제출할 수 없고 실행 중인 프로그램도 실패해요.
JobManager 고가용성을 사용하면 JobManager 장애에서 복구할 수 있어 SPOF를 제거할 수 있어요. 모든 클러스터 배포에서 고가용성을 구성할 수 있어요.
클러스터를 고가용성으로 만드는 방법 (How to make a cluster highly available)
JobManager 고가용성의 기본 아이디어는 항상 단일 리더 JobManager가 있고 리더가 실패하면 리더십을 인계받을 여러 대기(standby) JobManager가 있다는 것이에요. 이는 단일 장애점이 없음을 보장하며, 대기 JobManager가 리더십을 인계받는 즉시 프로그램이 진행될 수 있어요.
Flink의 고가용성 서비스는 모든 것이 동작하도록 필요한 서비스를 캡슐화해요:
- 리더 선출 (Leader election): n명의 후보 중에서 단일 리더를 선택해요
- 서비스 디스커버리 (Service discovery): 현재 리더의 주소를 검색해요
- 상태 영속화 (State persistence): 후임이 작업 실행을 재개하는 데 필요한 상태(JobGraph, 사용자 코드 jar, 완료된 체크포인트)를 영속화해요
고가용성 서비스 (High Availability Services)
Flink는 두 가지 고가용성 서비스 구현을 제공해요:
- ZooKeeper: ZooKeeper HA 서비스는 모든 Flink 클러스터 배포에서 사용할 수 있어요. 실행 중인 ZooKeeper 쿼럼(quorum)이 필요해요.
- Kubernetes: Kubernetes HA 서비스는 Kubernetes에서 실행할 때만 동작해요.
고가용성 데이터 수명주기 (High Availability data lifecycle)
제출된 애플리케이션을 복구하기 위해 Flink는 애플리케이션의 메타데이터를 영속화해요. HA 데이터는 해당 애플리케이션이 종료 상태(종료, 취소, 실패)에 도달할 때까지 유지돼요. 이 시점이 되면 HA 서비스에 저장된 메타데이터를 포함한 모든 HA 데이터가 삭제돼요. 개별 작업에 대한 HA 데이터에도 비슷한 수명주기가 적용돼요.
ApplicationResultStore
ApplicationResultStore는 종료 상태(종료, 취소, 실패)에 도달한 애플리케이션의 최종 결과를 보관(archive)하는 데 사용돼요. 데이터는 파일 시스템에 저장되고(application-result-store.storage-path 참고), 해당 애플리케이션이 제대로 정리되지 않는 한 항목은 dirty로 표시돼요. dirty 항목은 정리 대상이며, 정리가 성공하면 항목이 삭제돼요.
JobResultStore
JobResultStore는 전역 종료 상태에 도달한 작업의 최종 결과를 보관하는 데 사용돼요. 데이터는 파일 시스템에 저장돼요(job-result-store.storage-path 참고). 해당 작업이 제대로 정리되지 않는 한 항목은 dirty로 표시되며, 정리가 성공하고 해당 애플리케이션이 dirty 항목을 만들면 삭제돼요.