일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Data Warehouse
- MySQL
- AWS
- 스파크 스트리밍
- kafka rest api
- 데이터 엔지니어
- 스파크
- delta lake
- 대용량 처리
- spark streaming
- 데이터 엔지니어링
- Parquet
- spark
- kafka
- 레드시프트
- 카프카
- Schema Registry
- airflow
- Data engineering
- 카프카 구축
- Zookeeper
- 데이터 웨어하우스
- Data Engineer
- s3
- 에어플로우
- 델타레이크
- 데이터
- 컬럼 기반
- docker
- Redshift
- Today
- Total
목록데이터 엔지니어링 (30)
데이터 엔지니어 기술 블로그
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bha5YD/btq102X8kUQ/onzH8lYaIemQH6p1e8Tl1K/img.png)
About 카프카는 클라이언트 API를 가지고 있는데 이것을 사용해서 프로듀서와 컨슈머 어플리케이션을 개발할 수 있다. 카프카는 서드파티 클라이언트를 사용할 수 있는데 python, C++, go 등에서도 사용할 수 있다. 카프카는 처리량이 많은 작업에 사용될 수 있다. 예를 들면 웹사이트 클릭 로그를 수집하거나 신용카드를 사용한 거래 등에서 사용될 수 있다. 프로듀서에서 카프카 클러스터까지의 처리 방식 메시지 클래스인 ProducerRecord의 객체를 생성한다. 토픽과 값을 입력하는 것이 기본이고 파티션과 키는 옵션으로 지정할 수 있다. send() 함수를 이용해 Serializer에서 네트워크로 전송할 수 있는 Byte Array로 변환한다. 그 후 Partitioner에서 메시지를 어떤 파티션으로..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ObcZM/btq10R2HziK/POaLxTo0NtIkxzl2ewubcK/img.png)
About 카프카를 GUI로 보기 위해서 kafdrop 이라는 라이브러리를 사용하려고 한다. docker로 미리 만들어진 이미지가 있어서 정말 간단하게 사용할 수 있다. Tutorial & Example 1. 작업할 폴더를 생성한다. 2. docker-compose.yml 파일을 생성하고 아래처럼 입력한다. - KAFKA_BROKERCONNECT에 기존에 생성했던 카프카 브로커를 입력해주었다. version: "3.8" services: kafdrop: image: obsidiandynamics/kafdrop restart: "always" ports: - "9000:9000" environment: KAFKA_BROKERCONNECT: "pipeline-kafka-1:9092,pipeline-kafka..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cH7Doz/btq10LgN0Dh/DkT07vx8yYgiiyFJ5nAr8K/img.png)
About 카프카를 사용할 때 운영으로 사용하려면 구성을 잘 조절해야 한다. 스트리밍 데이터로 많은 데이터가 들어오고 나가기 때문에 비용 차이, 속도 차이가 클 수 있다. /config/server.properties 파일을 수정하여 설정을 적용할 수 있다. 카프카 구성하기 broker.id=1 카프카는 클러스터로 구축할 때 broker.id를 기준으로 브로커를 분류하기 때문에 하나의 클러스터에서 여러개의 broker.id를 지정할 수 없고 각기 다르게 지정해주어야 한다. port=9092 카프카는 기본 포트로 9092를 사용한다. num.network.threads=3 네트워크 요청을 처리하는 쓰레드 수 지정할 수 있다. num.io.threads=8 IO가 발생했을 때 사용되어지는 쓰레드의 개수를 지..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bcZblL/btq1Ylpfksx/KtBwkInFF1ngWLZpuaovKK/img.png)
About 카프카 구축 (1) 과 카프카 구축 (2) 에서 구축했던 카프카 클러스터는 각자 다른 host를 가지고 있기 때문에 프로듀서가 카프카로 요청을 보낼 때 어디로 보내야 할 지 확실하지가 않다. 프로듀서에서 카프카 클러스터 중 하나의 브로커로 보낸다고 했을 때 그 브로커가 어떠한 문제로 종료되면 요청을 보낼수가 없다. 그래서 하나의 엔드포인트가 필요하다. 엔드포인트에 요청을 보내면 문제가 생긴 인스턴스가 아닌 곳으로 요청을 보내 처리할 수 있도록 고가용성을 확보할 수 있다. 직접 REST API를 만드려고 했으나 Confluent에서 오픈소스로 지원해주어서 사용하여 구축하려고 한다. Confluent의 기능을 사용할 수 있는 방법은 두가지가 있다. Confluent Platform 과 Conflu..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vRnRc/btq1ztVlHde/jhk40zRhJzTHjbhhnN4bJK/img.png)
Spark Streaming 개요 스트리밍 처리는 실시간으로 들어오는 데이터를 처리하는 것을 말하는데, 스파크 스트리밍은 배치 처리를 해준다. 배치 처리란 A시간 부터 B시간까지의 처리를 한 묶음, B시간 부터 C시간까지의 처리를 한 묶음으로, 처리를 하는 것을 말한다. n초에 한 번씩 실행하는 등의 지정을 할 수 있다. 스파크 스트리밍은 특정 포트를 통해 데이터를 받아들일 수 있으며 데이터를 전부 불러와서 처리하는 것이 아닌 특정 시간 사이에 들어온 데이터를 처리하는 방식이다. Example 1. 스파크 세션을 생성한다. 2. 스트리밍 데이터프레임 생성한다. 3. 변형 작업을 한다. 4. 목적지로 출력한다. 5. 1을 더하는 출력 결과 예시는 다음과 같다. -------------------------..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/me7QZ/btq1xmBighf/BJnk0D6VM6LdtUldU2ZZ8K/img.png)
스노우플레이크(snowflake) 클라우드 컴퓨팅 기반 데이터 웨어하우징 회사이다. 2012년 7월에 설립되었고 2014년 10월에 공개적으로 출시되었다. 서비스로서의 데이터 웨어하우스(SaaS)를 제공해주며 복잡하게 구성된 데이터 웨어하우스를 완전관리 해준다. 빠르고 사용하기 쉽고 유연한 데이터 스토리지, 처리 및 분석 솔루션을 제공해준다. snowflake 소개 AWS Snowflake AWS에서도 스노우플레이크를 제공해준다. 일본 리전은 2018년에 생겻다. aws.amazon.com/ko/financial-services/partner-solutions/snowflake-data-warehouse/ Snowflake Data Warehouse on Amazon Web Services (AWS) S..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cJMcg7/btqZ3gv7eXf/7qnFrAiTH6FTxQxQsY93Rk/img.png)
주키퍼(ZooKeeper)란? 분산 코디네이션 서비스를 제공하는 오픈소스 프로젝트 주키퍼는 직접 애플리케이션 작업을 조율하지 않고 조율하는 것을 쉽게 개발할 수 있도록 도와주는 도구이다. API를 이용해 동기화나 마스터 선출 등의 작업을 쉽게 구현할 수 있게 해준다. 각 애플리케이션의 정보를 중앙 집중화하고 구성관리, 그룹 관리 네이밍, 동기화 등의 서비스를 제공한다. 주키퍼의 데이터는 메모리에 저장되고, 영구 저장소에 스냅샷을 저장한다. 분산 코디네이션 서비스란? - 분산 시스템에서 시스템 간의 정보 공유, 상태 체크, 서버들 간의 동기화를 위한 락 등을 처리해주는 서비스 Architecture 주키퍼는 분산 시스템의 일부분이기 때문에 동작을 멈춘다면 분산 시스템이 멈출수도 있다. 그래서 안정성을 확보..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/pnh41/btqZQJkUxVp/ekpk808N6ns6E7fq4spDwK/img.png)
카프카 포춘 500대 기업의 1/3을 포함하여 많은 조직에서 사용되고 있다. 끊임없이 진화하고 성장하는 스트림으로 데이터를 처리하는데에 중점을 두었다. 카프카는 메세징 시스템이지만 클러스터로 실행되고 수동으로 연결하는 개별적인 메시징 브로커 대신에 회사의 모든 데이터 스트림을 처리를 위한 탄력적으로 확장할 수 있는 중심 플랫폼 역할을 한다. 실시간 버전의 하둡을 생각하고 만들어졌다. 메세지 발행과 구독하기(publish/subscribe) 이 구조에서는 데이터를 발행자가 구독자에게 직접 보내지 않고 중간에 브로커가 도와준다. Pub/Sub 구조가 아닌 곳에서는 여러 서버에서 나오는 로그, 메트릭 등을 사용해야 할 때 모니터링 서버, 분석 서버, UI 서버 등에 각자 연결해야 하지만 Pub/Sub구조라면 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c2Ul8r/btqZKBt7PFG/AGPCnTgaV3pXu2UoSkd0Xk/img.png)
카프카란? - 실시간으로 게시, 구독, 저장 및 처리할 수 있는 분산 데이터 스트리밍 플랫폼입니다. - 여러 소스에서 데이터 스트림을 처리하고, 여러 사용자에게 전달합니다. - FIFO(First In First Out)큐를 사용합니다. 마이크로서비스에서의 카프카 - 다른 개발팀의 데이터를 스트리밍하여 데이터 스토어를 채우면, 데이터를 여러 팀과 공유할 수 있습니다. 라인 사용하는 이유 - LINE 메세지 개발 서버 팀에서 복잡해진 아키텍처를 간소화하기 위한 중간 레이어로 사용하고자 채택했습니다. 사용 방식 크게 아래의 두가지로 구성됩니다. 1. 분산 큐잉 시스템으로 사용하는 방법 - 웹 서버에서 비싼 비용의 작업을 처리해야 할 때 백그라운드의 태스크 프로세서에 요청하기 위한 큐를 사용하는 경우 2. 데..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ILoHu/btqZGmdoOUu/aJrHQPUwGjVZvRpEqY6v41/img.png)
Apache Hadoop 에코 시스템의 column-oriented 데이터 스토리지 포맷입니다. Hadoop에서 사용할 수 있는 column-oriented 파일 형식 RCFile, ORC와 유사합니다. 향상된 성능과 함께 효율적인 데이터 압축 및 인코딩 체계를 제공합니다. 기존 Hadoop 컬럼 스토리지 형식인 Trevni을 개선하기 위해 설계되었습니다. 기능 column-oriented 1. 각 열의 값은 인접한 메모리 위치에 물리적으로 저장됩니다. 2. 열 단위 압축은 효율적이어서 저장 공간을 절약합니다. 3. 같은 열의 값은 비슷한 유형이므로 유형별 압축 기술이 필요하지 않습니다. 4. 특정 열 값을 가져오는 쿼리는 전체 행을 읽지 않고 일부 열만 읽습니다. 5. 열마다 다른 인코딩을 적용할 수 ..