3. 데이터 파이프라인이란?
▶ 서로 다른 여러 시스템 간의 데이터 이동과 흐름을 말함
▶ 어느 한 단계의 출력이 다음 단계의 입력으로 이어지는 연결된 구조로서 수집과 정제, 집계 등을
동시에 병렬로 수행해 전체 시스템의 효율성을 추구
Ⅰ. 카프카를 이용한 데이터 파이프라인 구축
데이터 파이프라인 구축 시 고려사항
▶ 적시성 : 시간 단위의 배치부터 실시간 처리까지 데이터 흐름의 다양한 적시성 요구사항을 만족
▶ 신뢰성 : 단일 장애점을 없애고 신속하고 자동화된 복구가 가능
‘최소 한번’(at-least-once), ‘정확히 한번’(exactly-once) 등 다양한 방식의 데이터 전달 보장
▶ 처리량 : 매우 높은 처리량을 갖도록 수시로 확장과 조정이 가능해야 함
▶ 데이터 형식 : 다양한 형식의 데이터를 지원하고 제약이 없어야 함
▶ 보안 : 파이프라인을 거치는 데이터의 암호화 기능
파이프라인에 데이터를 읽거나 쓸 때의 인증 기능 제공
▶ 변환 : ETL(추출-변환-적재) or ELT(추출-적재-변환)
▶ 장애처리 : 잘못된 데이터의 유입방지, 분석할 수 없는 데이터의 복구, 결함있는 데이터의 정정 등
▶ 결합방지 : 데이터를 제공하는 소스와 데이터를 받아 사용하는 대상의 결합방지 필요
4. NiFi, ElasticSearch, Spark, Hbase, Hive, Hue, etc…
Ⅰ. 카프카를 이용한 데이터 파이프라인 구축
▶ NiFi
- 분산 환경에서 대량의 데이터를 수집 및 처리할 수 있는 어플리케이션
- 웹 기반에 직관적인 인터페이스를 가지고 있어 접근성이 좋고 DataFlow를 쉽게 개발 가능
- 실시간 처리에 적합하고 데이터 추적이 쉬우며 NiFi 시스템 간 데이터 교환 가능
▶ ElasticSearch
- 아파치 루씬 기반의 분선형 RESTful 검색/분석 엔진
- 정형, 비정형, 위치정보, 메트릭 등 다양한 유형의 데이터를 원하는 방식으로 검색 및 결합 가능
- NoSQL 데이터베이스처럼 사용이 가능 및 내용 전체 색인해 특정 단어가 들어간 문서 검색 가능
▶ Spark
- 빅데이터 처리를 위한 오픈소스 병렬분산처리 플랫폼
- 인메모리 기반으로 고속 데이터 처리 가능하며, 일괄처리 작업 및 온라인 분석 처리에 유용
▶ Hbase
- 구글의 빅테이블을 모델로 개발된 column-based NoSQL DB
- 하둡의 HDS에서 동작하며 대량의 데이터를 안정적으로 다루는데 효과적임
▶ Hue
- 데이터를 탐색, 쿼리 및 시각화하기 위한 오픈소스 웹 기반 사용자 인터페이스
- 하둡과 하둡 에코시스템의 모니터링과 지원을 위한 인터페이스를 제공
▶ Hive
- 하둡을 기반으로 대용량 데이터를 질의하고 그 결과를 생성하는 SQL Query 엔진
- HiveQL 이라는 SQL 같은 언어를 제공하며 맵리듀스의 모든 기능을 제공함
7. Netfilx
Ⅰ. 카프카를 이용한 데이터 파이프라인 구축
▶ 실시간 모니터링 과 이벤트 처리를 위한 데이터 파이프라인의 백본 역할
▶ 초당 150만건 이상 생서외는 이용자의 로그 데이터를 카프카에 적재한 후 실시간 스트리밍 분석용
인프라를 이용해 이용자 반응에 실시간 대응
8. Uber
Ⅰ. 카프카를 이용한 데이터 파이프라인 구축
▶ 카프카를 이용해 분당 수백 번의 승차 관련 정보를 로그 데이터로 저장한 후 아마존 S3에 대량
로드하거나 하둡에 담아 스트리밍 처리
9. 스포티파이
Ⅰ. 카프카를 이용한 데이터 파이프라인 구축
▶ 카프카를 데이터 허브로 이용해 사용자의 각종 로그 정보를 수집하고 분석해 플레이리스트
자동 제공 서비스 등을 제공
10. 카프카 스트림즈
Ⅱ. 카프카 스트림즈
▶ 카프카에 저장된 데이터를 처리하고 분석하기 위해 개발된 클라이언트 라이브러리
▶ 레코드별 스트림 처리를 milliseconds latency로 지원
▶ 자바나 스칼라 어플리케이션 안에서 카프카 스트림즈 API를 호출해 사용
▶ 손쉽게 스트림 프로세싱 프로그램을 만들 수 있도록 고수준의 스트림 DSL 지원
▶ DSL로 구혀한 프로세서들이 스트림 처리를 위해 서로 연결된 토폴로지를 만들어 처리
▶ 간단하고 가벼우며 시스템이나 카프카에 대한 의존성이 없음
▶ 카프카 브로커나 클라언트에 장애가 생겨도 스트림에 대해 1번만 처리되도록 보장
▶ 한 번에 한 레코드만 처리하며 이중화된 로컬 상태 저장소를 지원
11. 카프카 스트림즈
▶ Kafka Stream DSL
- 스트림과 테이블에 대한 추상화 제공( Kstream, Ktable, GlobalKTable)
- 함수형 스타일의 다양한 transformation 제공(map, filter aggregation, join ,windowing)
- DSL을 사용해서 토폴로지를 구성할 수 있음
▶ DSL을 이용해 토폴로지를 구성하는 순서
1. 카프카 토픽으로부터 데이터를 읽어 들이는 input 스트림을 지정
- input topic -> Kstream : Kstream은 분할된 레코드 스트림을 나타낸다.
Input 토픽의 모든 파티션 데이터의 집합
- input topic -> Ktable : 키값의 중복여부에 따라 insert/update/delete로 해석됨
interactive queries를 지원 시 테이블 이름을 지정하지 않으면 사용불가
2. input 스트림의 Transformation 구성
- transformation operation 들은 하나 이상의 프로세서로 변형 및 체이닝되어 복잡한 토폴로지 구성
- KStream관련 Operation : 하나 이상의 KStream 이나 KTable을 생성
- KTable 관련 Operation : KTable 만 생성
3. output 스트림을 카프카 토픽에 기록
Ⅱ. 카프카 스트림즈
12. 카프카 스트림즈
▶ Transformation
1. stateless transformation : 처리를 위해 상태를 저장할 필요가 없음(State Store 불필요)
- Branch : 조건에 따라 하나 이상의 Kstream으로 분리
- Filter : 특정 조건을 만족하면 output stream으로 전달
- FlatMap : 하나의 레코드로 0개 이상의 레코드를 생성할 때 사용
레코드의 Key, Value, Type을 바꿀 수 있음
- GroupByKey : 키를 이용해 레코드들을 그룹화. 테이블을 aggregation하기 위한 전제조건이며
후속 operation 들을 위해 레코드들이 Key로 적절히 분할되도록 함
- Map : 하나의 레코드를 다른 레코드로 만듬. Key, Value, Type을 수정할 수 있음
- MapValues : 하나의 레코드를 다른 레코드로 만듬. 이때 Key는 변하지 않고 Value만 변경
2. Stateful transformation : input 레코드를 처리하기 위해서 상태값에 의존(State Store 필요)
- Aggragating : 레코드들의 groupBy, groupByKey로 그룹화 되면 KGroupedStream 혹은
KGroupedTable로 표현됨.
또한 reduce, adder, subtractor 같은 연산을 통해 집계될 수 있음
- Joining : Stream과 Table의 조인, 데이터베이스의 변경된 데이터를 카프카로 보냄.
Stream API를 이용해 로컬 조인을 수행해서 원격 데이터베이스의 부하와 latency를
크게 줄일 수 있음
- Windowing : Windowing을 사용하면 aggregation이나 join같은 Stateful 연산을 할 때 같은
Key를 가지는 레코드들을 windows라고 불리는 그룹으로 그룹화할 수 있음.
Ⅱ. 카프카 스트림즈
13. 카프카 SQL(KSQL)
▶ 카프카용 스트리밍 SQL 엔진
▶ 자바나 파이썬 같은 프로그래밍 언어로 코드를 만들 필요없이 간단한 유사 SQL문을 사용가능
▶ 필터링, 변환, 집계, 조인, 윈도우, 세션화 등의 강력한 기능을 사용할 수 있음
▶ 카프카 스트림즈 API와 마찬가지로 스트림과 테이블이라는 핵심적인 데이터 추상화 방법을 제공
▶ 자바나 스칼라에 익숙하지 않은 개발자나 데이터엔지니어, 아키텍트 등의 담당자에게 유용
▶ 현재는 KsqlDB라는 이름으로 변경되어 발전 중
Ⅲ. 카프카 SQL(KSQL)
14. 카프카 SQL(KSQL)
▶ KSQL 아키텍처
- KSQL 엔진 : KSQL 쿼리가 실행되는 곳. KSQL 쿼리를 작성하고 실행하면 KSQL 서버 안에서
application을 빌드하고 실행함. 각 KSQL 서버는 KSQL 엔진을 인스턴트로 실행
- REST 인터페이스 : KSQL 엔진에 클라이언트로 접근할 수 있는 인터페이스
REST 서버는 KSQL 엔진과 통신하면서 어플리케이션과 REST 통신 시 사용
- KSQL CLI : 콘솔화면에서 Mysql이나 PostgresSQL의 CLI와 유사한 사용법으로 KSQL 엔진에
접근할 수 있도록 함
- KSQL UI : Confluent Control Center를 사용해 KSQL을 접근가능하게 도와줌
▶ KSQL 주요 용어
- STREAM : 구조화된 데이터의 연속된 흐름. 추가는 가능하지만 변경되거나 삭제되지 않음
스트림 데이터는 카프카 토픽이나 이미 존재하는 다른 스트림으로부터 파생하여 만듬
- TABLE : 전통적인 데이터베이스의 테이블과 거의 동일하며 스트림 혹은 windowing을 통해 더
효과적인 데이터를 얻을 수 있음. 업데이트/삭제할 수 있으며 카프카토픽이나 이미 존재하는
스트림 또는 테이블로부터 파생하여 만들 수 있음
- STRUCT : KSQL 5.0 보다 높은 버전을 사용하면 Avro 또는 JSON 형식의 데이터를 STRUCT 타입으로
stream 또는 table을 생성할 수 있음.
Ⅲ. 카프카 SQL(KSQL)
15. 카프카 SQL(KSQL)
▶ KSQL 커스텀 function(UDF, UDAF)
- KSQL API를 사용해 커스텀 function들을 개발하여 추가할 수 있음
- Stateless scalar function(UDF)
-> User Defiend Function으로 불리는 scalar function은 1개의 row를 받으면 1개의 데이터를
output으로 리턴
Ⅲ. 카프카 SQL(KSQL)