목차 LIST
Implement Checkpointing in a Flink Program
상태를 장애 내성 상태 (fault tolerant)로 만들기 위해서는 Flink가 상태를 체크포인팅해야 한다.
체크포인팅은 몇 가지 파라미터를 설정하여 구현할 수 있으며, 이 파라미터들은 환경 객체를 사용하여 설정된다.
스트림 실행 환경의 ENV 객체를 사용하여 이 파라미터들을 설정한다.
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
1. enableCheckpointing
기본적으로 체크포인팅은 비활성화 되어 있으며, 이 메서드를 사용하여 활성화한다. 인수는 체크포인팅 시간을 밀리초 단위로 전달한다.
Flink가 스트림에 배리어를 주입할 때 이 시간을 고려한다.
env.enableCheckpointing(1000);
2. setMinPauseBetweenCheckpoints
스냅샷이 생성된 후 상태 백엔드에 저장되는데, 상태값이 큰 경우 체크포인트가 완료되기까지 더 큰 시간이 걸릴 수 있다.
하나의 체크포인트 완료 시간과 다음 체크포인트 트리거 시간 사이의 최소 일시 정지 시간을 설정한다.
예) 체크포인트가 900밀리초에 완료되면, 다음 체크포인트는 900+500=1400밀리초가 되기 전까지는 시작하지 않는다.
체크포인팅이 병렬로 실행되지 않는 유일한 처리 시간으로 모든 자원은 500밀리초 동안 오직 처리 작업만 수행한다.
Flink는 배리어를 주입할 때 이러한 일시 정지 시간도 고려한다.
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(500);
3. checkpointTimeout
체크포인트가 완료되기까지 허용되는 최대 시간이다.
Flink가 체크포인트를 완료하는 데 10000밀리초를 허용하며, 이 제한을 초과하면 체크포인트는 폐기된다.
env.getCheckpointConfig().setCheckpointTimeout(10000);
4. setCheckpointingMode
보장 수준을 결정한다. exactly-once와 at-least-once가 있다.
exactly-once : 각 요소가 연산자에 의해 정확히 한 번 처리되고 그 이상은 처리되지 않음을 보장한다. exactly-once 보장에는 추가 시간이 필요하므로 지연이 문제가 되지 않는 경우에 사용한다.
at-least-once : 각 요소가 연산자에 의해 적어도 한 번 처리되지만, 한 번 이상 처리될 수 있음을 보장한다. 저지연 애플리케이션의 경우 더 적은 시간을 소요하는 at-least-once 보장 수준을 사용한다.
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE); // AT_LEAST_ONCE
5. setMaxConcurrentCheckpoints
동시 체크포인트 수를 설정한다. 기본적으로, 시스템은 하나의 체크포인트가 진행 중일 때 다른 체크포인트를 트리거하지 않는다.
하지만 경우에 따라 중첩되는 여러 체크포인트를 허용할 수 있는데, 이때 동시에 실행될 최대 체크포인트 수를 설정할 수 있다.
env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);
6. enableExternalizedCheckpoints
외부화된 체크포인트
스냅샷을 HDFS와 같은 외부 스토리지에 기록하는 상태 백엔드가 있는데, 기본적으로 외부 상태 백엔드에서 체크포인트는 유지되지 않으며 작업 실패 시 복구를 위해서만 사용된다.
이 체크포인트는 작업 취소 후 스토리지에서 삭제되지만 이 속성으로 체크포인트를 유지할 수 있다.
RETAIN_ON_CANCELLATION : 작업이 취소된 후에도 체크포인트 유지
DELETE_ON_CANCELLATION : 작업 취소 시 체크포인트 삭제
env.getCheckpointConfig().enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION); // DELETE_ON_CANCELLATION
7. RestartStrategies
Flink는 실패 시 작업을 다시 시작하는 방법을 제어하는 다양한 재시작 전략을 지원한다.
이 재시작 전략은 flink-conf.yaml 에서 구성할 수 있으며, 실행 환경에서 setRestart 메서드를 호출하여 특정 작업에 대한 재시작 전략을 정의할 수 있다.
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3, 100));
// 최대 시도 횟수 3, 지연 시간 100 밀리초
재시작 전략
1) ✔ fixedDelayRestart : Flink는 작업을 다시 시작하기 위해 주어진 횟수만큼 시도하고, 최대 시도 횟수를 초과하면 작업은 실패한다.
인수로는 두 연속된 재시작 시도 사이의 지연 시간을 전달한다. 다음 재시도는 즉시 발생하지 않고, 인수로 받은 지연 시간 후에 새롭게 재시도된다.
※ If checkpointing is activated and the restart strategy has not been configured, the fixed-delay strategy is used with Integer.MAX_VALUE restart attempts.
env.setRestartStrategy(RestartStrategies.fixedDelayRestart(max no. of restart attempts, delay time));
2) failureRateRestart : 최대 시도 횟수가 없으며, Flink는 실패율을 초과할 때까지 재시작을 시도한다. 실패율을 초과하면 작업은 실패하며 첫 번째 인수는 실패율이다.
실패율은 간격당 실패 횟수와 같으며, 간격은 두 번째 인수로 지정된다. 예를 들어서 500밀리초 동안 작업이 3회 이상 실패하면, 작업은 실패한 것으로 간주된다.
env.setRestartStrategy(RestartStrategies.failureRateRestart(failure rate, time interval for measuring failure rate, delay time));
env.setRestartStrategy(RestartStrategies.failureRateRestart(3, 500, 100));
3) noRestart : 재시작 시도는 이뤄지지 않는다.
env.setRestartStrategy(RestartStrategies.noRestart());
4) fallbackRestart : 클러스터 정의 재시작 전략
'데이터 엔지니어링' 카테고리의 다른 글
Iceberg 에 대해 알아보자 | Architecture 및 도입 이유 (0) | 2024.08.23 |
---|---|
Debezium에 대해 알아보자 | 사용 방법 및 MySQL 연동 (0) | 2024.08.19 |
Flink - State, Checkpointing and Fault Tolerance 상세 내용 (0) | 2024.08.19 |
Flink Memory에 대해 알아보자 (0) | 2024.05.21 |
Flink DataSources 정의 및 구성 요소 (0) | 2024.05.20 |
댓글