Task 및 Asset State Store 개요

Task 및 Asset State Store 개요 (Task and Asset State Store Overview)

3.3 버전에 추가된 Task store와 Asset store의 개념을 정리한 문서예요. Airflow가 전통적으로 태스크를 상태 없는(stateless)·멱등한 작업 단위로 다뤘지만, 워커가 죽어도 살아남아야 하는 job ID나 실행마다 앞으로 나아가는 watermark 같은 데이터를 따로 저장해야 할 때가 있어요. 이 두 저장소가 XCom이나 Variable 시스템을 건드리지 않고 그 공백을 메워 줘요.

출처: 문서

본문

3.3 버전에 추가됨 (Added in version 3.3).

Airflow는 항상 태스크를 상태가 없고(stateless) 멱등한 작업 단위로 모델링해 왔어요. 그런데 점점 더 많은 워크로드가 태스크의 반환값 밖에 어떤 데이터를 영속화하길 요구해요. 예를 들어 워커가 죽어도 살아남아야 하는 제출된 job ID, 실행마다(run-by-run) 앞으로 나아가는 watermark, 관측 가능성을 위해 노출하는 행(row) 카운터 같은 것들이죠. Task store와 Asset store는 XCom이나 Variable 시스템을 건드리지 않고 그 공백을 채워 줘요.

Task 및 Asset State Store

Task store와 Asset store는 job ID, watermark, 행(row) 개수 같은 데이터를 영속화하기 위한 두 개의 key/value 저장소를 제공해요. 이 두 저장소는 무엇을 기준으로 스코프가 정해지는지에 따라 구분돼요:

Store Scope Default lifetime Primary use case
Task store 단일 Task Instance (dag_id + run_id + task_id + map_index) 보존(retention) 기간을 설정 가능; clear_on_success = True면 태스크 성공 시 정리됨 재시도에서 살아남기, 진행 중인 job 추적, 실행 내 진행 상황 체크포인트, 이전 실행이 설정한 체크포인트에서 진행 재개
Asset store 자산(asset, 특정 실행과 무관) 무기한 영속; asset이 비활성화될 때만 제거됨 실행 간 watermark, 증분 로드 커서, asset별 메타데이터

두 저장소 모두 JSON으로 직렬화 가능한 값을 받아들여요. 값은 기본 metastore 백엔드를 사용해 저장하거나, 커스텀 워커 사이드 백엔드로 오프로드할 수 있어요.

Task 및 Asset State Store를 언제 써야 할까요?

자신의 유스케이스에 맞는 메커니즘을 고르는 데 아래 표를 활용해 보세요.

Mechanism When to use it
XCom 단일 Dag 실행 내에서 태스크 간에 데이터를 전달할 때(예: 한 태스크의 출력을 다운스트림 태스크가 소비) 또는 서로 다른 여러 Dag 실행 간에 데이터를 전달할 때(다른 실행에서 영속화한 데이터를 참조). XCom은 재시도 시 정리되므로, 태스크 재시도나 실행 간에 데이터를 영속화하는 데는 쓰면 안 돼요.
Variables 배포 전체 또는 설치 전체에 걸친 구성으로, 자주 바뀌지 않고 태스크 자신이 아니라 운영자가 설정하는 값.
Task store 워커 크래시를 견뎌야 하는 데이터, 또는 같은 실행 내에서 재시도 사이에 살아남아야 하는 데이터. 오래 걸리는 job이 끝나기 전에 기록해 두는 외부 job ID가 task store의 완벽한 유스케이스예요.
Asset store asset 이벤트를 가로지르거나 asset을 "watching"하는 동안 영속되어야 하고, 태스크가 아니라 asset이 논리적으로 소유하는 데이터. 예를 들어 객체 스토리지에 파일이 놓일 때마다 앞으로 나아가는 watermark 같은 거예요.

참고 (Note)

현재 구현이 XCom 기반 패턴을 이미 잘 활용하고 있다면 task store로 마이그레이션할 필요는 없어요. Task store는 XCom이 원래 설계되지 않은 문제를 풀기 위한 것이에요.

더 읽을거리 (Further reading)

더 알아보기 (Learn more)