티스토리 뷰

반응형

airflow 로 스케쥴 관리를 하고 있는데, logical_date 가 1초 밀리는 희안한 일이 일어났다.

logical_date 의 경우 RUN_ID 값에 시간값이 붙어서 쉽게 인지가 가능한데, 정상적일땐 아래와 같이 RUN_ID 값이 00 으로 딱 떨어졌는데, 어느순간 다음과 같이 RUN_ID 의 값이 00 으로 딱 안떨어지고, 뒷 단위가 조금씩 밀리는 현상이 발견되었다.

구분 정상일때 비정상일때
RUN_ID scheduled__2003-12-07T20:00:00+00:00 scheduled__2003-12-07T21:00:01.0099+00:00

 

이게 문제가 되는 이유는 ExternalTaskSensor 의 경우는 앞쪽 DAG 의 의존성을 체크할때 logical_date 가 같은 이력을 참조하기 때문에 이게 이상한 값으로 인지되면 무한정 대기하는 문제가 생기기 때문에 문제가 컸다.

 

참고로 logical_date 가 뭔지 모르겠다면 아래글을 먼저 읽고 오도록 하자.

2023.12.05 - [데이터처리/Airflow] - [AIRFLOW] logical_date 의 개념 이해하기- execution_date 의 대체

 

원인

원인은 DAG 선언시 catchup 을 False 로 선언했고, 스케쥴이 지연되면서 문제가 발생된것이었다.

catchup 이 False 이면 예정된 스케쥴시간이 넘어가면 연속된 과거의 사이클이 연속되는게 아니라 밀린후 실행될때, 그 실행시점의 값이 새로운 logical_date 의 시작값이 되고, 이 이후 계속 어긋난 형태로 스케쥴이 돌게 된다.

with DAG(dag_id='my_dag', start_date=datetime(2023, 12, 1, 0, tzinfo=local_tz), 
         schedule=timedelta(hours=1), catchup=False) as dag:
    ...

 

문제가 없을때

아래와 같이 1시간 사이클일때 기준 start_date 를 시작으로 1시간씩 늘어나면서 logical_date 가 생길것으로 기대되고, 스케쥴이 지연안되면 문제없이 의도한 기준시간값이 생성되어 아무런 문제가 없는데 (catchup 이 True 이건 False 이건)

문제가 없을때의 logical_date 값

문제가 있을때

만약, catchup 이 False 로 세팅되었다면,명시적으로 지연될 경우 과거 실행이력에서 사이클만큼 더해진 logical_date 를 할당받는게 아니라, 단순히 과거는 잊고(?) 실행된 시점의 시간을 logical_date 으로 할당되면서, 그 이후의 logical_date 가 꼬이는 문제가 발생되는것입니다. 이것은 1시간 파티션단위로 배치를 꾸준히 만들어야 할때는 절대 있어서는 안되고, 밀린 사이클은 명시적으로 처리되어야 하므로 주의해야합니다.

 

문제가 발생되는것은 스케쥴이 지연되고, catchup 이 False 일때이다.

해결방법

DAG 를 선언할때 catchup 값을 꼭 True 로 선언해서 사용하도록 하자.

# catchup 은 True 로 쓰자
with DAG(dag_id='my_dag', start_date=datetime(2023, 12, 1, 0, tzinfo=local_tz), 
         schedule=timedelta(hours=1), catchup=True) as dag:
    ...

이렇게 선언하면, 앞쪽 스케쥴의 종료값에 schedule 만큼 명시적으로 더해서 logical_date 를 만들게 되기 때문에 이렇게 꼬이는 현상이 나타나지 않는다. 

https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/dag-run.html#catchup

 

DAG Runs — Airflow Documentation

 

airflow.apache.org

스케쥴이력이 없다면, 과거 데이터부터 처리되는 문제가 발생될 우려가 있어서, dev 와 prod 환경을 동일한 DAG 파일로 관리할때 start_date 변경이 번거로워서 기냥 이 옵션을 해제했다가 이런 의도치 않은 문제를 겪었는데 주의하도록 하자.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함