일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 대용량 처리
- delta lake
- Data engineering
- 카프카 구축
- 스파크
- kafka
- spark streaming
- Schema Registry
- s3
- Zookeeper
- spark
- kafka rest api
- Redshift
- 레드시프트
- Parquet
- Data Engineer
- 에어플로우
- 카프카
- 데이터 웨어하우스
- AWS
- MySQL
- 컬럼 기반
- 데이터
- 델타레이크
- 스파크 스트리밍
- 데이터 엔지니어링
- Data Warehouse
- 데이터 엔지니어
- docker
- airflow
- Today
- Total
목록분류 전체보기 (62)
데이터 엔지니어 기술 블로그
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bpHRos/btrhMRE3GAJ/yAQVqBtKN29y3q3XpLGdjk/img.png)
개요 카프카를 구축할 때 Confluent에서 제공해주는 서비스가 정말 유용한데, 일부는 무료이고 일부는 사용기간 이후에는 라이센스가 필요한 경우가 있다. 서비스마다 다르므로 잘 확인하고 사용해야한다. 라이센스 정보 Enterprise (Subscription) License Confluent Server Confluent Control Center Confluent for Kubernetes Confluent Replicator MQTT Proxy Community License Confluent REST Proxy ksqlDB Confluent Schema Registry Confluent Admin REST API Connector의 경우 커넥터는 종류에 따라 라이센스가 다르다. 이 링크에서 확인할..
개요 Redshift는 데이터 웨어하우스를 만들 수 있게 도와준다. AWS에서 제공하는 서비스이며, 다양한 소스와 쉽게 결합할 수 있는 기능이 있는데, 연합 쿼리라고 하며 하나의 쿼리 안에 S3, Athena, RDS, Redshift에 있는 데이터를 이용할 수 있다. 레드시프트는 비용이 비싸서 모든 데이터를 여기에 넣을 수 없어서 큰 데이터들은 S3에 넣는 경우가 많으며, 서비스는 RDS를 사용하는데 이 기능을 사용하면 쉽게 결합할 수 있다. S3에서 데이터를 가져올 경우 Redshift 인스턴스는 사용하지 않고 독립적인 인스턴스를 사용하는 Redshift Spectrum을 이용하게 되는데 비용은 1TB에 5$정도 된다. 사용 방법: https://docs.aws.amazon.com/redshift/l..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/XsA3s/btrhvOIpBhA/jc5VbMlqWf1d5yWWp0ZaO1/img.png)
레드시프트란? AWS에서 제공하고, AWS와 쉽게 통합할 수 있으며 컬럼 기반, PostgreSQL을 기반으로 만들어져 있다. 리더 노드와 실제로 쿼리를 처리하는 컴퓨터 노드가 있는 클러스터로 구성되어 있어서 쉽게 확장할 수 있다. 클라우드 데이터 웨어하우스를 만들 때 사용한다. 레드시프트 기능 정렬 키(SORT KEY) 정렬키에 따라 순서대로 데이터베이스에 저장한다. 자동 테이블 최적화 작업을 하면 정렬키를 선택할 필요가 없다. AUTO 키워드를 사용하여 자동으로 정렬키를 선택할 수 있다. 자주 사용되거나 조인되는 경우 사용하면 된다. 분산 테이블을 생성할 때 4가지(AUTO, EVEN, KEY, ALL)중 하나를 선택할 수 있다. 분산키를 선택하지 않으면 AUTO를 사용한다. 기본 키 및 외래 키 제..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/8Y7dX/btrhqgyQowN/GArWUDXggBzW0HFafpDUCk/img.png)
개요 파이써 패키지를 만들어서 사용해야하는데, public pypi 에 올릴 수 없는 경우 private PyPI 서버를 만들어야한다. 서버를 띄워둘 때 새로운 EBS를 연결하지 않은 EC2나 EFS를 연결하지 않은 ECS 등의 상태가 유지되지 않을 수 있는 환경에서 띄우기엔 애매할 때 S3를 백엔드로 사용할 수 있다. 내용 S3를 백엔드로 사용하려면 pypicloud라는 라이브러리를 사용하면 된다. S3외에도 GCS, Blob Storage를 사용할 수 있다. 공식 페이지 https://pypi.org/project/pypicloud/ Getting Started https://pypicloud.readthedocs.io/en/latest/topics/getting_started.html#uploadi..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Yohlu/btran82J2js/NG9SINbfz28av536yyOLdK/img.png)
카프카는 메시지를 보내는 Producer와 Consuemr로 이루어져 있다. 카프카는 Producer가 메시지를 보낸 후 Consumer가 소비하려고 할 때 누가 보낸 메시지인지 확인할 수 있는 방법이 없다. 그래서 Producer가 메시지를 기존에 보내던 것과 다른 스키마 형식으로 보낸다면 Consumer는 바뀐 메시지를 받았을 때 문제가 크게 발생할 수도 있다. 이런 일을 방지하기 위해서 스키마 레지스트리를 사용할 수 있다. Schema Registry란? 스키마 레지스트리는 Producer와 Consumer가 주고 받으려는 메시지의 스키마를 서로 알게 해주고 호환을 강제한다. 예를 들면 Producer가 처음에 정의했던 스키마와 호환되지 않는 스키마를 보내려고 할 때 보낼 수 없게 막아준다. 스키마..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bIovSf/btq97OI6uDc/J0bYe02sNd7ggSAxwBqfv1/img.png)
카카오의 카프카 적용 사례 RUBICS 출처: https://kakao.github.io/2016/04/27/rubics/ 루빅스는 카카오의 추천 시스템이다. 2015년에 뉴스 기사를 추천하는 서비스에서 사용이되었으며 현재는 카카오 채널 등 다양한 콘텐츠에서 루빅스의 추천시스템을 사용하고 있다. 뉴스 서비스는 다른 콘텐츠에 비해서 생명주기가 짧기 때문에 사용자의 반응을 최대한 빠르게 수집 및 처리하여 추천 랭킹에 반영해야 한다. 실시간 데이터 처리 메시지큐: 카카오에서는 카프카가 데이터 손실을 방지해 줄 수 있으며 안정적이기 때문에 메시지큐로 사용했다. 데이터 스트림 처리기: 추천 랭킹을 위한 기계 학습에서 사용되며 Apache Spark Streaming을 사용하고 있다. 개발팀 내에 스칼라 언어에 익..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dYorMw/btq93nSg4De/7sh2uxDOkeRj9K140OZfd0/img.png)
개요 카프카를 활용한 인프라를 설계해보기 위해 찾아보다가 Confluent 공동 창립자 중 한명인 네하 나크헤데의 프레젠테이션을 보게 되었다. 이번에는 그 내용을 정리해보려고 한다. 프레젠테이션 내용 지난 10년간 데이터 시스템은 많이 바뀌었다. 여러 DB에서 데이터 웨어하우스로 ETL하여 데이터를 넣는 방식이었다. 최근 몇가지 데이터 추세는 ETL 아키텍처의 극적인 변화를 주도하고 있다. Single Server Database는 전사적 규모로 분산 데이터 플랫폼으로 바뀌고 있다. 그리고 일반적인 데이터가 아닌 logs, sensors, metrics 등으로 데이터 타입이 많아지고 있으며 스트림 데이터는 점점 보편화(increasingly ubiquitous)되고 있다. 그래서 그 결과는 아주 복잡한 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Yi4uk/btq9aFs726d/0iyKufHcK3V9xDQGEjz9GK/img.jpg)
개요 카프카에서는 토픽을 많이 생성해서 사용하는데 Naming Convention 없이 사용하게 된다면 나중에 복잡해질수도 있기 때문에 알아보려고 한다. Convention 카프카에서 토픽을 생성할 때 유효한 문자는 [영문, 숫자, '.', '_', '-']만 사용할 수 있다. 그리고 유의할 점은 마침표(.)와 밑줄(_)은 충돌할 수 있기 때문에 둘 중 하나만 사용하는 것이 좋다. 선택할 수 있는 예시들은 다음과 같다. .. -- ... .. .. ... .. .. 이 게시물을 작성한 사람은 이 데이터 타입으로 성공했다고 한다. 이 방식으로 사용하면 인프라가 어느정도 커져도 커버할 수 있을 것으로 예상된다. message type logging queuing tracking etl/db streaming..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/8JFEO/btq9aeibTkR/8qwFmiIe8hTsJDrpTyU361/img.png)
개요 데이터를 수집하고 가공하고 제공을 하기 위해서 보통 아주 많은 양의 데이터들을 다루게 된다. 파일을 저장할 때 압축을 하지 않는다면 파일의 크기가 커지는 동시에 비용도 증가하게 된다. 이것을 줄이기 위해서 보통은 압축을 해서 저장을 하게 된다. 저장하는 방식에는 여러가지가 있는데 이번에는 각 압축 방식마다 어떤 특징이 있는지 알아보려고 한다. 압축 방식들 gzip GNU zip의 줄임말이며 초기 유닉스 시스템에 쓰이던 압축 프로그램을 대체하기 위해 만들어졌다. 1992년 10월 31일에 처음 공개되었다. 무손실 압축 데이터 알고리즘(DEFLATE)을 사용한다. 파일 형식 중에 하나인 타르(tar)와 함께 .tar.gz 형식으로 자주 사용된다. 이 경우 다른 파일끼리 중복되는 부분을 압축시킬 수 있다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ce3mEV/btq85k486H1/uNRIlbthY2e1bYrWOC5aMK/img.png)
개요 카프카로 데이터를 이동시킬 때 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..