2022. 4. 13. 15:13

ELT 툴 Airbyte 개요 및 M1 mac local환경 세팅

Airbyte?

  • 데이터 통합을 쉽고 확장가능성 있게 만들어주는 EL(T) Tool
  • CDC기능을 사용 준실시간성으로 데이터를 가져올 수 있다
  • 비교적 설치가 간편하다
  • 지원하는 데이터 connector들이 많다 DB이외에 페이스북, 인스타그램 등 다양한 SNS과도 연동 가능하며 140개 이상의 커넥터를 지원
  • T(Transform)부분의 지원이 빈약하다
  • 아직 Hive나 Glue 저장을 지원하지는 않는다
  • 쿠버네티스, 에어플로우, dbt 등과 통합하여 사용할 수 있다.
    • ex) airflow + airbyte + dbt on kubernates

 

Architecture

  • Airbyte는 플랫폼과 커넥터 이렇게 두가지 컨셉으로 나뉜다.
    • 플랫폼은 모든 수평적 서비스들에서 요구하는 설정과 데이터의 움직임을 운영하는(UI, configuration API, job scheduling, logging, alerting 등...)것들을 제공한다.
    • 커넥터들은 데이터를 넣고 가져오는 독립적인 모듈이다.
    • 커넥터들은 도커 이미지로 패키징 되어있다.
  • UI: Airbyte API와 상호작용을 통해 쉽게 사용할 수 있는 그래픽 인터페이스
  • WebApp Server: UI와 API사이에 커넥션을 핸들링
  • Config Store: 모든 커넥션 정보들을 저장한다(credentials, frequency 등)
  • Scheduler Store: 스케줄러에 대한상태와 작업정보를 저장
  • Config API: Airbyte의 메인 컨트롤. sources, destinations, connections, 설정 관리 등 API로 부터 불러와 설정한다.
  • Scheduler: 스케줄러는 API의 요청에 의해 작업을 수행하고 Temporal service로 병렬적으로 작업을 할당하여 보낸다. 작업의 성공/실패를 트래킹하는 것을 책임진다.
  • Temporal Service: 스케줄러를 위해서 task queue와 워크플로우들을 관리한다.
  • Worker: 워커들은 source 커넥터와 연결하여 데이터를 당겨와 destination에 적재한다.
  • Temporary Storage: 언제든지 디스크에 데이터를 채우고 싶을 때, Worker들이 사용할 수 있는 스토리지

 

Source

  • Extract 대상의 연결 목록들을 관리하는 곳

 

destination

  • Load 대상의 연결 목록들을 관리하는 곳

 

connection

  • 등록한 Source와 Destination을 조합해 하나의 Connection으로 연결해서 관리할 수 있다.
  • sync하는 주기를 설정할 수 있다. (시, 분 단위)
  • 원하는 컬렉션 or 테이블만 골라서 가져올 수 있다.
  • Overwrite할지 incremental하게 쌓을지 선택할 수 있다.
    • 증분형식으로 가져오기 위해서는 primary key 지정이 필수

 

Quick start

git clone <https://github.com/airbytehq/airbyte.git>
cd airbyte
docker-compose up
  • webserver: http://localhost:8000
  • 단, M1의 경우에는 일부 이미지가 지원되지 않는 경우가 있어서 arm64 이미지로 새롭게 build된 dev버전으로 실행해야 한다.

 

requirements for build

  1. Java 17
  2. Node 16
  3. python 3.7 or higher
  4. Docker and Docker-compose
  5. Jq

위 요구사항을 build하기 전에 맞춰준다.

export DOCKER_BUILD_PLATFORM=linux/arm64
export DOCKER_BUILD_ARCH=arm64
export ALPINE_IMAGE=arm64v8/alpine:3.14
export POSTGRES_IMAGE=arm64v8/postgres:13-alpine
export JDK_VERSION=17
  • M1의 경우 빌드전 환경변수로 arm64로 세팅해주어야 한다. 터미널을 통해 위 변수들을 미리 설정해준다.
SUB_BUILD=PLATFORM ./gradlew build
  • 환경변수들을 적용한 이후에 airbyte root 위치에서 위 명령어로 gradle을 통해서 build해준다.
VERSION=dev docker-compose up
  • 위 명령어를 통해서 m1 실리콘 환경 로컬에서 airbyte를 실행할 수 있다.