Apache Airflow
프로그래밍 방식으로 워크플로우(일련의 작업의 흐름)를 작성, 예약 및 모니터링하는 오픈 소스 플랫폼
작업을 정확한 시간에, 정확한 방법으로, 정확한 순서대로 실행하게 해주는 오케스트레이터
에어비엔비에서 개발했으며, Apache 인큐베이터 프로젝트로 선정된 지 3년 만에 탑 레벨 프로젝트로 선정되었다.
장점
Dynamic Data Pipeline
데이터 파이프라인을 정의하는데 Python을 이용한다. 따라서 Python으로 가능한 대부분의 작업을 Airflow 파이프라인에서 처리할 수 있으며, 동적인 구성이 가능하다.
Scalability
Airflow는 확장성이 뛰어나다. 다양한 task를 병렬적으로 실행할 수 있으며, 쿠버네티스 클러스터, 분산 클러스터 환경에서 파이프라이닝이 가능한다.
편리한 사용자 인터페이스
웹 서버에서 제공하는 웹 인터페이스를 통해 데이터 파이프라인을 모니터링하고 관리하기 편하다.
High Extensiblility
플러그인 설치가 쉽다. 새로운 작업 툴이 나와 적용하고자 할 때는 에어플로우가 툴을 지원할 때까지 기다릴 필요 없이 플러그인을 개발해서 적용할 수 있다.
코어 컴포넌트
- Scheduler : 워크플로우를 스케쥴링하는 스케쥴러 데몬. 모든 DAG와 태스크를 모니터링하고 관리하며, 주기적으로 실행해야 할 태스크를 찾고 해당 태스크를 실행 가능한 상태로 변경한다.
- DAG Script : 개발자가 작성한 Python 워크플로우 스크립트
- Web Server : 에어플로우 웹 인터페이스를 제공하는 웹 서버. flask, gunicorn을 사용한다.
- MetaStore : 어떤 DAG가 존재하고 어떤 태스크로 구성되는지, 어떤 태스크가 실행 중이고 실행 가능한 상태인지 등의 메타데이터가 저장되는 데이터베이스. Postgresql를 추천하지만, mysql, sqlite도 사용 가능하다.
- Executer : 어떤 환경에서 task가 실행될지에 대한 타입 정의. 태스크 인스턴스를 실행하는 주체로, 다양한 타입이 존재한다.
- Worker : 실체 task를 처리하는 컴포넌트
- Kerberos : 인증 처리를 위한 프로세스로 필수 사항은 아니다.
주요 개념
DAG
Directed Acyclic Graph; 유향 비순환 그래프
Airflow는 Task의 연결 관계를 DAG로 관리하고, 웹 인터페이스를 통해 DAG 구조를 시각적으로 확인할 수 있다.
Operator
- Task의 Wrapper 역할로, 원하는 작업을 달성하기 위해 존재한다.
- Action Operator : 기능, 명령을 실행한다. (ex. bash Operator, Python Operator)
- transfer Operator : Source에서 Destination으로 데이터를 전송한다.
- Sensor Operator : 특정 조건을 감지하면 실행된다. 조건이 만족할 때까지 기다렸다가, 조건이 충족되면 다음 Task를 실행한다.
Task
데이터 파이프라인에 존재하는 Operator
테이터 파이프라인이 트리거 되어 실행될 때 생성된 task를 Task Instance라고 한다.
Workflow
DAG를 통해 태스크 간의 의존성을 정의하고, 각 태스크를 오퍼레이터로 실행하는 일련의 과정으로 정의된다.
참고 문서
https://velog.io/@jjongbumeee/Airflow1
https://engineering.linecorp.com/ko/blog/data-engineering-with-airflow-k8s-1/