Airflow란?
복잡한 데이터 파이프라인의 스케줄링과 모니터링을 위한 워크플로우 오케스트레이션 플랫폼.
workflow란?
- 특정 목표를 달성하기 위해 의존성으로 연결된 작업의 과정
- 데이터 파이프라인으로 예를 들면, 데이터 수집 → 처리 → 저장 등의 여러 작업이 순서대로 진행되는 흐름이 워크플로우
- 에어플로우 같은 도구는 이런 워크플로우를 설계하고 관리하는데 최적화된 솔루션
Airflow의 핵심개념
DAG (Directed Acyclic Graph)
워크플로우의 논리적 흐름을 DAG, 방향성 비순환 그래프라고 한다. 파이프라인 단계는 하나의 작업이 다른 작업에 의존하거나 특정 순서로 실행되어야 하기 때문에 방향성을 지닌다. 또한 완료된 작업을 다음 작업으로 둘 수 없기 때문에 순환할 수 없는 비순환 그래프이다.
DAG은 작업(Task)들의 집합으로, 파이썬으로 DAG 코드를 작성하면 수동 트리거를 통하거나 스케줄러가 정의한 일정에 따라 주기적으로 읽어 실행한다.
Task
DAG내에서 실행되는 개별 작업. 각 태스크는 독립적으로 실행 할 수도 있고, 다른 태스크와의 종속성을 설정해 순차적이거나 병렬로 실행 될 수 있다.
Operator
오퍼레이터는 태스크가 실제로 무엇을 수행할지 미리 정의해놓은 템플릿이다. 다양한 오퍼레이터가 존재하며 주요 오퍼레이터는 다음과 같다.
- PythonOperator : Python 함수를 실행하는 오퍼레이터
- BashOperator : bash 명령을 실행
- Sensor : 조건이 충족될 때까지 대기하는 태스크
Airflow의 구성요소
에어플로우는 아래와 같은 구성요소들로 이루어져 있으며 이들 간의 상호작용을 통해 작업을 스케줄링하고 모니터링한다.
- 스케줄러 (Scheduler)
- 실행기 (Executor)
- 워커 (Worker)
- 데이터베이스
- 웹 서버 (Web Server)
스케줄러 (Scheduler)
DAG의 종속성에 따라 태스크의 실행 순서를 관리하고 실행 시점을 조정하는 역할. 스케줄러는 DAG파일을 주기적으로 확인해 새로 추가되거나 변경된 DAG을 처리한다.
작동 과정
- 정기적으로 각 DAG 내의 태스크 상태를 확인
- 실행 조건을 만족하여 실행될 준비가 되면 해당 태스크를 Queue에 추가 (주기가 설정된 경우 주기에 따라)
- 워커에서 태스크 실행하고 결과를 스케줄러에 보고하여 후속 태스크의 실행 여부를 결정함
실행기 (Executor)
스케줄러가 큐에 태스크를 넣고 해당 태스크가 워커에서 처리되도록 중개하는 역할. 각 executor는 워커가 태스크를 언제 어떻게 처리할지 결정한다. executor에 따라 태스크의 실행방식이 달라지며 다양한 환경에 맞춰 적합한 executor를 선택 할 수 있다.
- SequentialExecutor (순차 실행기)
- 태스크를 한 번에 하나씩 실행하는 방식으로 주로 개발 및 테스트 환경에서 사용
- LocalExecutor (로컬 실행기)
- 여러 프로세스를 생성하여 단일 노드에서 병렬로 태스크를 실행하는 방식으로 단일 머신에서 실행되기 때문에 확장이 제한적.
- CeleryExecutor (셀러리 실행기)
- Celery라는 분산 작업 큐 시스템을 활용해 여러 워커가 여러 노드에서 병렬로 태스크를 실행
- 스케줄러는 태스크를 Celery 브로커(주로 Redis나 RabbitMQ)에 큐로 보내면, 여러 워커가 이 큐에서 태스크를 가져와 병렬로 처리
- 대규모 시스템에서 다수의 워커가 분산된 환경에서 태스크를 처리할 때 적합
- KubernetesExecutor (쿠버네티스 실행기)
- 쿠버네티스 클러스터를 기반으로 태스크를 실행하는 방식. 태스크마다 독립된 Pod에서 실행되며, 쿠버네티스의 오토스케일링을 활용할 수 있다.
- 스케줄러는 실행할 준비가 된 태스크를 쿠버네티스 API에 요청하여 새로운 Pod을 생성 → 각 태스크는 해당 Pod에서 실행되고 실행이 완료되면 Pod은 자동으로 삭제.
워커 (Worker)
태스크를 실제로 처리하는 실행 단위
데이터베이스
모든 태스크 및 DAG의 상태는 데이터베이스에 저장. 일반적으로 PostgreSQL이나 MySQL을 사용하여 DAG과 태스크의 메타데이터를 저장하고 관리한다.
웹 서버 (Web Server)
웹 인터페이스를 통해 DAG의 상태를 모니터링하고 태스크 실행결과와 로그등을 확인 할 수 있다.
Airflow의 기본 동작
- 유저가 새로운 DAG을 작성하여 DAG directory 안에 파이썬 파일 배치
- 웹서버와 스케줄러가 이를 파싱하여 웹서버에서는 새로운 DAG를 보여주고, 스케줄러는 DAG에 예약된 태스크와 태스크간 의존성 확인
- 스케줄러가 데이터베이스를 통해 DAG의 인스턴스인 DagRun 을 생성
- 스케줄러는 DagRun 오브젝트의 인스턴스인 Task Instance를 스케줄링하여 태스크가 실행 가능할때 해당 태스크를 queued 상태로 변경하고, Task Instance를 Executor로 보냄
- Executor 에서 queued 태스크를 큐에 넣어 Worker가 이를 가져가 실행 할 수 있게 함
- Worker는 큐를 polling 하여 태스크 실행하고, 태스크 완료후 Executor가 데이터베이스에 Task Instnace 상태 업데이트
- 스케줄러는 주기적으로 데이터베이스를 확인해 태스크 상태 점검후 Dag Run 최종상태 결정
- 웹서버에서도 이를 확인해 완료된 상태 UI 반영
'데이터 엔지니어링' 카테고리의 다른 글
BigQuery에서 ClickHouse로 이벤트 로그 데이터 분석 환경 개선하기 (1) | 2024.11.22 |
---|---|
유저의 액션 이벤트 로그 설계와 개선 과정 (7) | 2024.11.12 |
Apache Kafka 살펴보기 (0) | 2024.09.17 |
ksqlDB를 이용해 실시간 이벤트 스트리밍 최적화하기 (0) | 2024.02.20 |
카프카를 통한 실시간 데이터 파이프라인 구축기 (0) | 2023.09.27 |