본문 바로가기
데이터 엔지니어링

Flink - checkpoint 옵션 및 재시작 전략

by 내기록 2024. 8. 19.
반응형

 

목차 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 : 클러스터 정의 재시작 전략

     

     

     

    Flink - State, Checkpointing and Fault Tolerance 상세 내용

    개요목차 LIST  What is a State in FlinkFlink Checkpoints : Flink의 내결함성(Fault Tolerance)을 달성하기 위한 매우 중요한 개념이다.state가 뭔지, state의 유형, 체크포인팅을 사용하여 어떻게 구현되는지에 대

    sunrise-min.tistory.com

     

    반응형

    댓글