Apache Airflow는 배치 지향 워크플로우를 개발, 예약 및 모니터링 하기 위한 오픈 소스 플랫폼이다. 복잡한 과정을 python framework를 통해 workflow를 코드로 정의하고 제어할 수 있다는 장점이 있다.
Airflow의 가장 큰 특징은 워크플로를 파이선 코드로 정의한다는 것이다.
코드로 워크플로를 정의하는 것에는 몇 가지 이점이 있는데.
Dynamic
파이썬 코드로 구성되어서 동적인 파이프라인 구성이 가능하다.
→ 워크플로를 객체화 함으로써 유지/보수 변경에 용이하다.
Extensible
에어플로우에는 다양한 연산자를 포함하고 있어 개개인의 환경에 맞추어 다양한 기술들과 접목이 가능하다.
Flexible
진자 템플릿엔진을 활용하여 워크플로 매개변수화가 내장되어 있다.
→ 이 말 뜻은 뭔 말인지 잘 모르겠음.
# DAG 예제
from datetime import datetime
from airflow import DAG
from airflow.decorators import task
from airflow.operators.bash import BashOperator
# A DAG represents a workflow, a collection of tasks
with DAG(dag_id="demo", start_date=datetime(2022, 1, 1), schedule="0 0 * * *") as dag:
# Tasks are represented as operators
hello = BashOperator(task_id="hello", bash_command="echo hello")
@task()
def airflow():
print("airflow")
# Set dependencies between tasks
hello >> airflow()
2022년 1월 1일 시작하여 하루에 한 번 실행하는 “데모”라는 DAG, DAG는 Workflow의 하나의 표현이다.
bash 스크립트를 실행하는 bash operator
와 @task
데코레이터를 통해 작업 간의 종속성을 정의하고 작업이 실행되는 순서를 제어한다.
또한 이러한 작업의 상태를 GUI를 통해 간단히 볼수도 있다.
Airflow는 여러 기술과 연결할 연산자를 이용하여 확장성이 뛰어나고 무엇보다 복잡한 파이프라인을 코딩으로 간편하게 정의할 수 있고, 여러 모니터링해줄 GUI도 제공해준다.
Python으로 코딩한다는 것의 의미는 다음의 강력한 장점을 활용할 수 있다.
에어플로우는 배치 처리를 목적인 플랫폼으로 실시간 처리에는 적합하지 않음. 그러나 Apache Kafka와 함께 사용하는 경우가 많다. Kafka는 실시간 데이터 처리 수집에 사용하며, 이벤트 데이터는 스토리지 기록되고, Airflow는 정기적으로 데이터 배치를 처리하는 워크플로를 실행한다.
코딩보다 클릭을 선호하는 경우 Airflow가 좋은 솔루션이 아닐 수 있으나, 워크플로관리를 쉽게하기 위해 GUI를 제공하고 지속 개선해 나가는 중이다.
그러나 중요한 것은 에어플로우는 코드로 워크플로를 정의한다는 것이다.