데이터 엔지니어링(46)
-
[🧙Kafka] 카프카 토픽 이름 짓는 법(Topic Naming Convention)
개요 카프카에서는 토픽을 많이 생성해서 사용하는데 Naming Convention 없이 사용하게 된다면 나중에 복잡해질수도 있기 때문에 알아보려고 한다. Convention 카프카에서 토픽을 생성할 때 유효한 문자는 [영문, 숫자, '.', '_', '-']만 사용할 수 있다. 그리고 유의할 점은 마침표(.)와 밑줄(_)은 충돌할 수 있기 때문에 둘 중 하나만 사용하는 것이 좋다. 선택할 수 있는 예시들은 다음과 같다. .. -- ... .. .. ... .. .. 이 게시물을 작성한 사람은 이 데이터 타입으로 성공했다고 한다. 이 방식으로 사용하면 인프라가 어느정도 커져도 커버할 수 있을 것으로 예상된다. message type logging queuing tracking etl/db streaming..
2021.07.11 -
[압축 방식 비교] gzip vs snappy vs lz4 vs brotli vs zstd vs lzo
개요 데이터를 수집하고 가공하고 제공을 하기 위해서 보통 아주 많은 양의 데이터들을 다루게 된다. 파일을 저장할 때 압축을 하지 않는다면 파일의 크기가 커지는 동시에 비용도 증가하게 된다. 이것을 줄이기 위해서 보통은 압축을 해서 저장을 하게 된다. 저장하는 방식에는 여러가지가 있는데 이번에는 각 압축 방식마다 어떤 특징이 있는지 알아보려고 한다. 압축 방식들 gzip GNU zip의 줄임말이며 초기 유닉스 시스템에 쓰이던 압축 프로그램을 대체하기 위해 만들어졌다. 1992년 10월 31일에 처음 공개되었다. 무손실 압축 데이터 알고리즘(DEFLATE)을 사용한다. 파일 형식 중에 하나인 타르(tar)와 함께 .tar.gz 형식으로 자주 사용된다. 이 경우 다른 파일끼리 중복되는 부분을 압축시킬 수 있다..
2021.07.10 -
[🧙Kafka] S3 Sink Connector: 카프카 S3와 연동하기
개요 카프카로 데이터를 이동시킬 때 Kafka Connect를 사용하면 쉽고 편하게 이동시키는데에 도움이 된다. 예를 들면 MySQL에서 Kafka를 거쳐 S3에 넣고 싶을 때 JDBC Source Connector를 사용하여 MySQL에서 Kafka에 넣고, Kafka에서 S3 Sink Connector를 사용하여 S3에 넣을 수 있다. 여기에서 source connector는 데이터 소스에서 카프카로 데이터를 넣는 커넥터이고, sink connector는 데이터를 카프카에서 목적지로 데이터를 이동하는 커넥터이다. 이번에는 S3 Sink Connector를 사용하여 Kafka Connect가 어떻게 동작하는지 이해해보려고 한다. 시작하기 환경 Docker ubuntu:20.04 kafka 2.8.0 K..
2021.07.09 -
[Airflow] Task 알아보기: Operator, Sensor, TaskFlow
개요 Task는 에어플로우의 기본 실행 단위이다. Task에는 세가지 종류가 있다. 1. Operator: Bash, Python 등과 연결되어 있는 미리 정의된 작업 템플릿 2. Sensor: 외부 이벤트를 기다리는 연산자의 하위 클래스 3. TaskFlow: @task 데코레이터를 사용하여 패키지와 할 수 있는 기능(Airflow 2.0.0 신규 기능) 기본 개념 관계 작업간의 종속성을 설정하기 위해서 upstream, downstream을 사용할 수 있다. 연산자를 사용하여 종속성을 설정할 수 있다. a_task >> b_task >> [c_task, d_task] 작업은 기본적으로 자신의 정보를 전달하지 않으며 독립적으로 실행이 되지만, XCom을 사용하여 다른 태스크로 정보를 전달할 수 있다. ..
2021.06.21 -
[Airflow] 실행 날짜(execution date) 쉽게 이해하기
개요 에어플로우에서는 execution date 라는 개념이 있다. 과거에 실행하지 못한 작업을 그 시간대에 맞춰서 실행할 때 유용하다. 하지만 사용하면서도 계속 헷갈리는데 이번에 정리해보려고 한다. Execution Date란? 통계청에서 Parameter로 가져오는 날짜를 지정해야 하는 API가 있다고 생각해본다. 이 API를 사용하여 데이터를 수집하는 스크립트를 만들었다. 크론탭으로 이 스크립트를 매일 아침에 실행하게 하였는데 만약 3일 전(2021-06-14) 통계청 서버의 오류로 데이터를 수집하지 못한 것을 알아챘다면 스크립트의 매개변수 중 날짜를 2021-06-14로 설정한 후 다시 실행시켜야 한다. Airflow에는 Execution Date라는 개념이 있어서 매일 데이터를 수집하도록(@da..
2021.06.21 -
[Airflow] 에어플로우 시작하기: 개념 및 설치
개요 Airflow는 복잡한 워크플로우를 프로그래밍 방식으로 작성해서, 스케줄링하고 모니터링할 수 있는 플랫폼이다. 데이터 파이프라인을 이루고 있는 ETL 스크립트들을 스케줄링 할 때 crontab, cloudwatch 등을 사용하는 곳이 많다. 그러나 스크립트들이 많아지고 서로에 대한 의존성이 생기게 되면 컨트롤하기 어렵고, 기존 작업이 실패했을 때 다시 스크립트를 실행하려면 로그를 확인하고 실행해야 하는 등의 문제점이 생긴다. 이러면 바로 복구할수도 없고, 어디서 잘못되었는지 확인하기도 어렵고, 의존성이 있는 스크립트가 잘못되었는데 그 다음 스크립트가 실행이 되버리는 등의 문제점이 발생할 수 있다. Airflow에는 서로에 대한 의존성을 표현할 수 있고, 스크립트가 실패했을 때 알람을 보내 확인하고 ..
2021.06.16