Ingestion and Transformation
데이터 엔지니어링에서 스트리밍이 중요한 이유?
- 데이터 가용성 때문. 어떤 데이터를 언제 누가 접근할 수 있게 해주는가.
데이터 웨어하우스
- 데이터 웨어하우스는 오래전부터 있었는데, 클라우드 시절 이전이라 한정된 공간에 넣어야된다보니
분석을 위한 데이터만 뽑아서 사용하여 엄격한 스키마를 사용해야했다.
- 데이터는 ETL, transform이 끝나고 로드하는 시점(적재)부터 접근이 가능한데 BI 도구를 통해서만 접근이 가능했다.
그래서 실시간은 불가능하고 느렸다.
하둡을 이용한 배치시스템
- 여러 스키마들을 지원하나 똑같이 배치를 통해서 하다보니(로드한 시점 이후) 실시간은 불가능했다
- BI도구 뿐만 아니라 python과 같은 도구를 통한 접근이 가능해졌다.
스트리밍
- 데이터를 빼온 시점부터 바로 접근이 가능하다. programmable access가 가능해져 데이터의 다양한 처리가 가능해짐.
- 실시간 스트리밍이 그래서 중요하다!
잠시! 스파크도 스트리밍을 제어하는데 이게 실시간 스트리밍인가?
spark는 스트리밍을 제어한다. spark는 기본적으로 분산처리인데 배치기반이고
이걸 마이크로 배치(500ms)라고하는 걸로 모아서 처리하다보니 실시간 처리(1초에 2번씩 일이 일어나니까) 처럼 보인다.
native streaming은 데이터가 들어올때 하나하나 처리가 가능하다.
7. Event Streaming
Kafka
1. 링크드인에서 처음만들었다. 이후 오픈소스화해서 apahe재단에서 관리중
2. 오픈소스 분산 이벤트 스트리밍 플래슈폼: 실시간으로 스트리밍되는 이벤트기반 어플리케이션 개발이 가능하게 해주는 플랫폼.
3. 쓰기에 최적화된 시스템이다.
- 클릭이 저장되면 하나의 파티션에 넣지않고, 쓰기 테이블을 여러개의 파티션으로 쪼갠다.
- 카프카의 장점은 토픽을 쓰는데 파티션으로 쭉 쪼개면 쓰기 속도가 빨라지기 때문에 데이터 속도저하가 없다.
- 다만 파티션을 한번 늘리면 줄이는게 불가능하다. (새로운 토픽 생성이 아니면)
4. publish/subcribe messaging 기반이다.
예) 클릭스트리밍: 사용자가 이벤트 페이지에서 클릭하는 것, 사용자들이 페이지에서 클릭할때마다 지표를 서버가 수집한다. 이 프론트앤드 서버, 데이터베이스 서버, 쇼핑 카트, 챗서버 등등 각각 UI, Monitor 도구에 직접 연결하다보면 연결할게 많고 시스템이 복잡해져서 metrics Pub/Sub 하고 있는 걸 중앙에 만듦.
체킹해야될게 지표뿐만 아니라 로그, 트랙킹도 있고 등 회사내에서 이벤트 스트리밍이 되는게 다양할 수 있다.
그래서 이때마다 Pub/Sub를 만들어야되는데 그렇게 안되니까 하나로 합친게 kafka.
5. kafka는 두가지 모델을 합쳤다.
Queuing
producer가 데이터를 던지면 queue에다가 넣어놓고, 이 큐를 가져가는 consumer가 1번만 읽어가야되기 떄문에, 데이터 큐처리하는 모델이 1개있다. 데이터가 들어오면 여러사의 consumer가 있고 이걸 정확히 1번만 읽어서 처리
PubSub
여러가지 이벤트들이 쏟아지는데 어떤건 혼자 구독하고, 어떤건 여럿이 구독해서 이걸 처리하는 시스템.
6. 정말 빠르게 처리, 무한대 확장 가능, 전달되는 이벤트 스트리밍을 내부에 분산해서 안전하게 전달, 고가용성 유지
카프카는 카프카 클러스터가 있고 주키퍼 클러스터가 있다.
주키퍼 클러스터는 카프카 서버들이 등록할때 서버 뜨고, 죽었는지 관리. 컨슈머들이 이 토픽 받아갈게요라고 등록하는 관리.
근데 아파치 카프카가 주기퍼 의존성을 제거하는 작업을하고있다. 카프카 온 카프카라는 형태로 주기퍼를 제거하고 카프카만으로 구성하려고 하고있음.
kafka가 회사내에 시스템에서 동작하는 방식
프로듀서들이 모바일앱, SaaS, DBs, 마이크로서비스에서 커넥터 api를 통해 만들어진 kafak connector를 통해 이벤트가 쏟아진다. 이후 실시간 이벤트를 토픽별로 정리해놓고 kafka streams를 이용해 스트림을 변환, join등 처리한다.
처리한 스트림을 다시 실으면 이걸 또다른 커넥터를 이용해서 이 이벤트 스트림의 컨슈머들(분석도구,데이터웨어하우스, 실시간 처리 어플리케이션 등)이 이 이벤트를 가져간다.
kafka의 문제점 때문에 카프카를 더 사용하기 쉽게 만든게 CONFLUENT.
CONFLUENT: kafka기반의 에코 시스템.
- spark는 엔진이고, data bricks가 자동차로 예시를 든것처럼. kafka는 엔진이고 CONFLUENT는 자동차이다.
Pulsar
- 클라우드용 분산 메세징 스트리밍 플랫폼 (야후에서 만듦)
- 확장 가능, 속도 빠름, 범용적으로 저장가능, 다양한 언어 사용 등 기능상으로 카프카와 대동소이함.
- 다만 형태가 조금 차이남. 주키퍼는 그대로쓰나, 저장레이어는 북키퍼라고 하는 아파치 북키퍼 오픈소스를 통해 저장함. 저장레이어가 하나더 분리되어있다.
pulsar VS kafka
-카프카는 토픽을 파티션별로 쪼개서 저장하나, 펄사는 세그먼트 단위로 쪼개서 저장(단위가 더 작다.)
- 성능은 비교하는 사람마다 차이가 난다.
Kinesis
- 아마존이 만든 스트리밍 플랫폼.
- 아마존이 별도로 직접 만들었다.
- 카프카와 비슷 , 단어만 다른느낌..
가장 큰 차이는 카프카는 파티션단위 이기 때문에 늘이고 줄이는게 불가능하고, kinesis는 re-sharding이 된다. 샤드를 merging, splitting하는게 가능하다는 점.
- 대부분의 경우 카프카가 케네시스보다 성능이 앞선다.
MSK: 아마존 입장에서 케네시스가 성능이 떨어지기 때문에 카프카를 관리할 수 있는 서비스를 만듦.
케네시스 -> 카프카 , 카프카 관리가 힘들거같으면 돈내고 MSK를 써라!
'STUDY > Data Engineering' 카테고리의 다른 글
1. CKA udemy 강의 정리 - Section 2 [k8s란?] (1) | 2023.01.02 |
---|---|
[정리] 최신 데이터 인프라 이해하기_#7 - Kafka Streams, kSQL, ksqlDB, Apache Flink, Spark Structured Streaming (0) | 2022.01.22 |
[정리] 최신 데이터 인프라 이해하기_#5 Spark, Python, Hive (0) | 2022.01.15 |
[정리] 최신 데이터 인프라 이해하기_#4 데이터 모델링과 워크플로우 매니저 (0) | 2022.01.15 |
[정리] 최신 데이터 인프라 이해하기_#3 ETL/ELT 도구들 (0) | 2022.01.15 |