Medical AI & Article Review

Airflow, Kafka, dbt, Presto

Kimhj 2023. 10. 11. 01:20
  • Airflow
    • Airflow는 데이터 파이프라인을 작성하고 관리하기 위한 오픈소스 Work-flow 자동화 패키지임. 파이썬 스크립트로 사용자 지정 작업 및 work-flow를 지정할 수 있음. 
    • Airflow의 Task는 파이썬 함수로 구현되어 실행되고, 파이썬 패키지와 라이브러리를 확장해서 사용할 수 있음.
    • 데이터의 수집, 처리, 저장 및 전달을 자동화하고 스케쥴러를 실행할 수 있음.
    • 주요특징
      • Task 단위 Work-flow 관리
      • 스케쥴링 : Airflow는 작업을 정의하고 실행 일정을 설정할 수 있음. 작업들은 특정 시간 또는 조건에 따라 주기적으로 실행될 수 있음.
      • 모니터링 및 로깅 : Airflow 대시보드를 통해 실행중인 작업의 상태를 모니터링하고 Log Data를 볼 수 있음.
      • 동적 Work-flow : 파이프라인 내에서 조건문과 제어문을 사용해서 동적인 워크플로우를 생성할 수 있음.
      • 다양한 연결성 : 여러 Database, Storage System, Cloud Service와 연동이 가능한 플러그인 제공
      • 확장성 : 작업을 병렬로 실행하고 대규모 데이터 파이프라인을 처리할 수 있음.
    • 작동 방식
      • DAG (Directed Acylic Graph) 정의 : Airflow 는 DAG로 정의됨. DAG는 task 간의 의존성을 정의하는 방향성 비순환 그래프임
      • Operator 정의 : 각 Task는 Operator로 정의됨. Operator는 실제로 어떤 작업을 수행하는 역할을 하는데, 예를 들어 Python 함수 실행이나 SQL 쿼리 실행, 데이터 복사 등이 있음. 
      • DAG 작성 : Task 간 의존성을 정의하여 DAG 작성함. 파이프라인의 논리를 정의하는 영역임.
      • 스케쥴 설정 : 작업이 언제 실행되어야 하는지 스케쥴을 설정함. Airflow는 Cron expression 혹은 Timedelta를 사용하여 스케쥴링 할 수 있음.
      • 실행 : 설정된 스케쥴에 따라 Airflow는 작업을 실행하고 작업간의 의존성을 준수함.
      • 모니터링 및 관리 : 실행중인 작업 및 Work-flow를 Airflow 대시보드에서 모니터링하고 관리함. Task 실행상태와 로그 데이터를 확인할 수 있음.
    • Apache Airflow를 활용하면 데이터 파이프라인을 효율적으로 관리/스케쥴링 할 수 있으며 작업들간 의존성도 관리하여 데이터 처리작업을 자동화할 수 있음.
    • 파이썬 연동
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime

# DAG 정의
dag = DAG(
    'my_dag',
    schedule_interval=None,  # 실행 스케줄 설정
    start_date=datetime(2023, 1, 1),
    catchup=False  # 이전 실행 누락된 작업을 실행하지 않음
)

# 파이썬 함수 정의
def my_python_function():
    print("Hello from Python!")

 

  • Kafka
    • Kafka는 Apache kafka를 이용해서 데이터를 real-time으로 수집하고 저장, 전송하는 스트리밍 방식의 파이프라인
    • 대용량의 데이터를 안정적으로 처리할 수 있고, 분산 환경에서 동작하는 분산 스트리밍 플랫폼으로 활용되고 있음.
    • 구성요소
      • Apache Kafka : 데이터를 토픽(Topic) 단위로 구분하며, 데이터 생산자(Producer)가 데이터를 특정 토픽으로 전송하고 데이터 소비자(Cosumer)가 해당 토픽에서 데이터를 읽고 활용할 수 있음.
      • Producer : 데이터를 생산하고 Topic 으로 보내는 역할을 함. 
      • Broker : Kafka 의 각 서버를 Broker 라고 함. 브로커는 데이터를 받아서 저장하고, 데이터를 요청한 Consumer에게 전송함. 여러 브로커를 함께 사용하면 고가용성 및 확장성을 확보할 수 있음.
      • Topic : 데이터 스트림을 묶어서 저장하는 단위임. 각 토픽은 데이터 스트림의 특정 주제나 카테고리를 의미하며, 토픽 단위로 분류되고 처리됨.
      • Consumer : 토픽에서 데이터를 읽고 필요한 처리를 수행하는 역할임. 여러 destination으로 전송될 수 있으며, 이에 따라 소비자는 데이터를 처리하고 다양한 작업을 수행함.
    •  
    • 작동 방식
      • 데이터 수집 : 데이터 파이프라인은 다양한 data source 에서 수집함. 생산자(Producer)를 통해 Kafka 토픽으로 보내짐.
      • 스트림 처리 : Kafka 토픽에 도착한 데이터는 브로커에 저장되며, 소비자(Consumer)가 해당 토픽에서 데이터를 read하여 필요한 처리를 수행하고 다른 시스템으로 데이터를 전송할 수 있음.
      • 데이터 전송 : 데이터베이스에 저장하거나 실시간 대시보드에 표시하는 등, 처리된 데이터는 다른 시스템으로 전송됨.
      • 실시간 분석 및 모니터링 : 실시간으로 데이터를 처리하고 모니터링 할 수 있음. 
    • 파이썬 연동
from kafka import KafkaProducer, KafkaConsumer

# Producer
producer = KafkaProducer(bootstrap_servers='localhost:9092')
producer.send('my_topic', value='Hello, Kafka!')

# Consumer
consumer = KafkaConsumer('my_topic', bootstrap_servers='localhost:9092')
for message in consumer:
    print(message.value)

 

  • dbt
  • Presto