데이터 엔지니어링에서 스트리밍이 중요한 이유? - 데이터 가용성 때문. 어떤 데이터를 언제 누가 접근할 수 있게 해주는가.
데이터 웨어하우스
- 데이터 웨어하우스는 오래전부터 있었는데, 클라우드 시절 이전이라 한정된 공간에 넣어야된다보니
분석을 위한 데이터만 뽑아서 사용하여 엄격한 스키마를 사용해야했다.
- 데이터는 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 기반이다.
metrics Pub/Sub 을 만들어 구독하고 있는 곳에 보낸다.
예) 클릭스트리밍: 사용자가 이벤트 페이지에서 클릭하는 것, 사용자들이 페이지에서 클릭할때마다 지표를 서버가 수집한다. 이 프론트앤드 서버, 데이터베이스 서버, 쇼핑 카트, 챗서버 등등 각각 UI, Monitor 도구에 직접 연결하다보면 연결할게 많고 시스템이 복잡해져서 metrics Pub/Sub 하고 있는 걸 중앙에 만듦.
체킹해야될게 지표뿐만 아니라 로그, 트랙킹도 있고 등 회사내에서 이벤트 스트리밍이 되는게 다양할 수 있다.
그래서 이때마다 Pub/Sub를 만들어야되는데 그렇게 안되니까 하나로 합친게 kafka.
5. kafka는 두가지 모델을 합쳤다.
카프카는 위 두개의 모델을 합친것.
Queuing
producer가 데이터를 던지면 queue에다가 넣어놓고, 이 큐를 가져가는 consumer가 1번만 읽어가야되기 떄문에, 데이터 큐처리하는 모델이 1개있다. 데이터가 들어오면 여러사의 consumer가 있고 이걸 정확히 1번만 읽어서 처리
PubSub
여러가지 이벤트들이 쏟아지는데 어떤건 혼자 구독하고, 어떤건 여럿이 구독해서 이걸 처리하는 시스템.
6. 정말 빠르게 처리, 무한대 확장 가능, 전달되는 이벤트 스트리밍을 내부에 분산해서 안전하게 전달, 고가용성 유지
카프카는 카프카 클러스터가 있고 주키퍼 클러스터가 있다.
주키퍼 클러스터는 카프카 서버들이 등록할때 서버 뜨고, 죽었는지 관리. 컨슈머들이 이 토픽 받아갈게요라고 등록하는 관리.
근데 아파치 카프카가 주기퍼 의존성을 제거하는 작업을하고있다. 카프카 온 카프카라는 형태로 주기퍼를 제거하고 카프카만으로 구성하려고 하고있음.
kafka가 회사내에 시스템에서 동작하는 방식
kafka가 회사내에 시스템에서 동작하는 방식
프로듀서들이 모바일앱, SaaS, DBs, 마이크로서비스에서 커넥터 api를 통해 만들어진 kafak connector를 통해 이벤트가 쏟아진다. 이후 실시간 이벤트를 토픽별로 정리해놓고 kafka streams를 이용해 스트림을 변환, join등 처리한다.
처리한 스트림을 다시 실으면 이걸 또다른 커넥터를 이용해서 이 이벤트 스트림의 컨슈머들(분석도구,데이터웨어하우스, 실시간 처리 어플리케이션 등)이 이 이벤트를 가져간다.