개요

회사에서 내부망의 데이터를 클라우드로 옮겨야 할 일이 생겼고 이 과정에서 ETL이 필요하다.

요약하면 아래와 같은 과정 정도로 정리할 수 있다.

내부망 -> 내부 ETL -> 클라우드 전송 -> 클라우드 ETL -> 데이터레이크 적재

이때 내부 ETL 용으로 오픈소스를 도입하고자 하는데 기존에 써서 익숙한 NIFI와 곁눈질로 배운 AirFlow중 어떤 툴이 더 효율적인지, 2가지 이외의 괜찮은 툴은 없는지 조사를 한 뒤 내용을 좀 정리해보고자 한다.

Apache NIFI 장점

  • live batch streaming
  • guaranteed delivery
    • flow file 기반으로 누락없는 전송을 보장함
  • 데이터 버퍼링
    • 백 프레셔 관리 가능

Apache NIFI 우려사항

  • 실제 데이터가 커짐에 따라 GUI 및 트랙킹이 귀찮으면이 있음
  • zoo keeper 필요함

NIFI가 가장 잘 쓰일수 있는 요건

  • 자원효율적, NRT로 데이터를 A에서 B로 옮김

Apache Airflow 장점

  • workflow를 코드로 관리 가능
  • task 의존성 관리

Apache Airflow 우려사항

  • worker의 ETL 성능
    • 어찌보면 airflow는 workflow 엔진이지 etl 처리 엔진은 아니지 않나

Airflow가 가장 잘 쓰일수 있는 요건

  • Airflow 클러스터 외부 시스템에서 ETL이 처리되고 Airflow는 Workflow 관리만 하는 형태

고민의 지점

  • GUI 형태로 process를 만들고 직접 UI상에서 개발/디버깅을 해야 하는 NIFI 대비 파이썬 코드로 DAG, Operator를 관리할수 있는 Airflow가 더 끌리긴 한다.
  • 요즘은 확실히 Airflow가 대세인듯 하다.
  • 다만 Airflow는 NIFI 대비 장비 효율적인 성능이 나올지는 확인이 필요하다. Airflow는 아무래도 workflow 관리 자체에 의미를 두고 실제 실행은 클러스터 외부에서(hive/spark) 수행되는 아키텍처에 가장 적합해 보이긴 한다. 직접 끊임업이 데이터를 공급받아 ETL을 태워야하는 곳에는 NIFI가 더 적합할지도 모른다는 생각을 하고 있다.