책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/kafka-ksqldb
요약
카프카 스트림즈와 ksqlDB를 사용하면 쉽고 빠르게 스트림 데이터를 처리하고 실시간으로 분석할 수 있다. 강력한 카프카 스트림즈와 ksqlDB의 스트림 처리 기능을 바탕으로 매일 수천억 건 이상의 데이터를 처리하는 스트림 데이터 처리 애플리케이션도 개발할 수 있다.
이 책은 스트림 데이터의 일반적인 내용을 비롯해 카프카 스트림즈와 ksqlDB의 구현 원리 및 스트림 데이터 개발에 필요한 여러 기능과 상용화 방법을 쉬운 예제로 설명한다. 따라서 스트림 데이터 처리가 궁금한 독자나 스트림 데이터 처리 애플리케이션 개발에 관심이 많은 개발자라면 꼭 읽어봐야 하는 책이다.
추천의 글
“저자는 원리부터 시작해 최신 시스템까지 쉽게 설명한다. 이 책은 시스템의 핵심 개념을 살펴보고, 각 시스템의 미묘한 동작 방식 차이를 상세히 설명한다. 그리고 실제 세계 비즈니스에서 이런 시스템들을 어떻게 사용할 수 있는지 보여주는 실습 예제를 제공한다. 스트림 처리는 이제 필수 프로그래밍의 패러다임이 됐다. 이 책은 이를 성공적으로 이끌 수 있는 길을 밝혀줄 것이다.”
—제이 크렙스(Jay Kreps)
아파치 카프카 공동 창시자, 컨플루언트(Confluent) 공동 설립자이자 CEO
이 책에서 다루는 내용
◆ 카프카와 펍/섭 통신 패턴 학습
◆ 스트림 처리 애플리케이션 구축
◆ 윈도우 조인과 집계 등 복잡한 연산 수행
◆ 상태가 있는 처리의 내부 동작 이해
◆ ksqlDB의 데이터 통합 기능 학습
◆ ksqlDB의 여러 컬렉션 종류로 가져오기와 내보내기 쿼리 수행
◆ 카프카 스트림즈와 ksqlDB 애플리케이션 상용화 배치
이 책의 대상 독자
실시간으로 대용량 데이터를 움직이고 보강하며 변환하는 대규모의 스트림 처리 애플리케이션을 구축하는 방법을 배우고자 하는 데이터 엔지니어를 위한 것이다. 이런 기술들은 종종 비즈니스 인텔리전스 이니셔티브, 분석 파이프라인, 위협 탐지, 이벤트 처리 등을 지원해야 한다.
실시간 데이터 스트림을 분석해 자신의 기술력을 향상시키고자 하는 데이터 과학자와 분석가에게도 유용하다. 이는 데이터 처리 분야를 지배하고 있는 배치 처리 공간으로부터 벗어날 수 있는 새로운 출발점이 될 것이다. 아파치 카프카에 대한 사전 경험은 필수가 아니며, 자바 프로그래밍 언어가 어느 정도 친숙하다면 카프카 스트림즈 사용 지침을 좀 더 쉽게 따라갈 수 있다.
이 책의 구성
1장, '카프카 빠르게 소개하기’는 카프카 소개와 단일 노드 카프카 클러스터를 실행하는 사용 지침을 제공한다.
2장, ‘카프카 스트림즈 시작하기’는 카프카 스트림즈의 배경 지식과 아키텍처, 그리고 간단한 카프카 스트림즈 애플리케이션 실행을 다룬다.
3장과 4장에서는 카프카 스트림즈의 상위 수준 DSL(도메인 특화 언어)에 있는 상태가 없는 또는 상태가 있는 연산자를 살펴본다. 각 장은 비즈니스 문제를 풀 때 이 연산자를 어떻게 사용하는지 보여주는 사용 지침을 포함하고 있다.
5장, ‘윈도우와 시간’에서는 스트림 처리 애플리케이션에서 시간이 어떤 역할을 하는지 알아보고 윈도우 조인과 집계와 같은 고급스러운 연산인 상태가 있는 연산을 수행할 때의 윈도우 사용 방법을 다룬다.
6장, ‘고급 상태 관리’는 상태가 있는 처리가 내부적으로 어떻게 동작하는지 설명하고 상태가 있는 카프카 스트림즈 애플리케이션을 운영할 때 필요한 몇 가지 팁을 알려준다.
7장, ‘Processor API’는 카프카 스트림즈의 하위 수준 Processor API를 깊이 있게 다룬다. 이 API는 주기적인 함수 호출을 스케줄링할 때 사용할 수도 있고, 애플리케이션 상태와 레코드의 메타데이터를 좀 더 세분화된 단위로 접근하는 방법을 제공한다.
8장, ‘ksqlDB 시작하기’는 ksqlDB를 소개하고 이 기술의 역사와 아키텍처에 대해 알아본다. 8장의 튜토리얼은 ksqlDB 서버 인스턴스를 설치하고 실행하고 ksqlDB CLI로 작업하는 방법을 보여준다.
9장, ‘ksqlDB로 데이터 통합’은 ksqlDB의 데이터 통합 기능을 알아본다. 이 기능은 카프카 커넥트(Kafka Connect)의 도움을 받아 동작한다.
10장, 11장에서는 ksqlDB SQL을 자세히 알아보고, 여러 가지 컬렉션(Collection) 타입을 이용해 어떻게 작업을 하는지 보여준다. 또한 데이터 내보내기 쿼리(push query)와 데이터 가져오기 쿼리(pull query) 등을 수행한다.
12장, ‘테스트, 모니터링, 배포’에서는 카프카 스트림즈와 ksqlDB 애플리케이션을 상용 환경에 배포할 때 필요한 정보를 제공한다. 여기에는 모니터링, 테스트 그리고 애플리케이션을 컨테이너화하는 것을 포함한다.
목차
목차
- 1장. 카프카 빠르게 소개하기
- 통신 모델
- 스트림은 어떻게 저장되는가?
- 토픽과 파티션
- 이벤트
- 카프카 클러스터와 브로커
- 컨슈머 그룹
- 카프카 설치
- 안녕? 카프카
- 요약
- 2장. 카프카 스트림즈 시작하기
- 카프카 생태계
- 카프카 스트림즈 이전
- 카프카 스트림즈 이후
- 한눈에 보는 카프카 스트림즈 특징
- 운영 특성
- 확장성
- 신뢰성
- 유지 보수성
- 다른 시스템과 비교
- 배치 모델
- 처리 모델
- 카파 아키텍처
- 카프카 스트림즈 적용 사례들
- 프로세서 토폴로지
- 서브 토폴로지
- 깊이 - 우선 처리
- 데이터 흐름 프로그래밍의 이점
- 태스크와 스트림 스레드
- 상위 - 수준 DSL 대 하위 - 수준 Processor API
- 튜토리얼 소개: Hello, Streams
- 프로젝트 설치
- 새 프로젝트 생성
- 카프카 스트림즈 의존 라이브러리 추가
- DSL
- Processor API
- 스트림과 테이블
- 스트림/테이블 이중성
- KStream, KTable, GlobalKTable
- 요약
- 카프카 생태계
- 3장. 상태가 없는 처리
- 상태가 없는 처리 대 상태가 있는 처리
- 튜토리얼 소개: 트위터 스트림 처리
- 프로젝트 설치
- KStream 소스 프로세서 추가
- 직렬화/역직렬화
- 커스텀 Serdes 만들기
- 데이터 클래스 정의
- 커스텀 Deserializer 구현
- 커스텀 Serializer 구현
- 트윗 Serdes 구현
- 데이터 필터링
- 데이터 가지치기
- 트윗 번역
- 스트림 병합
- 트윗 보강
- Avro 데이터 클래스
- 감정 분석
- Avro 데이터 직렬화
- 레지스트리 없는 Avro Serdes
- 스키마 레지스트리-인식 Avro Serdes
- 싱크 프로세서 추가
- 코드 실행
- 실제 검증
- 요약
- 4장. 상태가 있는 처리
- 상태가 있는 처리의 이점
- 상태가 있는 연산자 훑어보기
- 상태 저장소
- 공통 특성
- 영구 저장소 대 인 - 메모리 저장소
- 튜토리얼 소개: 비디오 게임 전광판
- 프로젝트 설치
- 데이터 모델
- 소스 프로세서 추가
- KStream
- KTable
- GlobalKTable
- 스트림즈와 테이블 등록
- 조인
- 조인 연산자들
- 조인 종류
- 코-파티셔닝
- ValueJoiner
- KStream을 KTable로 조인(players 조인)
- KStream을 GlobalKTable과 조인(products 조인)
- 레코드 그룹핑
- 스트림즈 그룹핑
- 테이블 그룹핑
- 집계
- 스트림 집계
- 테이블 집계
- 모두 합치기
- 대화형 쿼리
- 저장소 물리화
- 읽기-전용 상태 저장소 접근
- 비윈도우 키-값 저장소 쿼리하기
- 로컬 쿼리
- 원격 쿼리
- 요약
- 5장. 윈도우와 시간
- 튜토리얼 소개: 환자 모니터링 애플리케이션
- 프로젝트 설치
- 데이터 모델
- 시간 의미
- 타임스탬프 추출자
- 내장 타임스탬프 추출자
- 커스텀 타임스탬프 추출자
- 타임스탬프 추출자와 함께 스트림 등록하기
- 스트림 윈도윙
- 윈도우 종류
- 윈도우 선택
- 윈도우 집계
- 윈도우 결과 내보내기
- 유예 기간
- 중간 결과 제거
- 윈도우 KTable 필터링과 키 재생성
- 윈도우 조인
- 시간-기반 데이터 흐름
- 알림 싱크
- 윈도우 키-값 저장소 쿼리하기
- 요약
- 6장. 고급 상태 관리
- 영구적인 저장소 디스크 레이아웃
- 내고장성
- 변경 로그 토픽
- 대기 복제본
- 리밸런싱: 상태(저장소)의 적
- 상태 이관 방지
- StickyTaskAssignor
- 고정 멤버십
- 리밸런싱 영향 줄이기
- 점진적 협력 리밸런싱
- 상태 크기 제어
- 레코드 캐시로 쓰기 중복 제거
- 상태 저장소 모니터링
- StateListener 추가
- StateRestoreListener 추가
- 내장 메트릭
- 대화형 쿼리
- 커스텀 상태 저장소
- 요약
- 7장. Processor API
- Processor API는 언제 사용해야 할까?
- 튜토리얼 소개: IoT 디지털 트윈 서비스
- 프로젝트 설치
- 데이터 모델
- 소스 프로세서 추가
- 상태가 없는 스트림 프로세서 추가
- 상태가 없는 프로세서 생성
- 상태가 있는 프로세서 생성
- 구두점으로 주기적인 함수 호출
- 레코드 메타데이터 접근
- 싱크 프로세서 추가하기
- 대화형 쿼리
- 모두 조립하기
- Processor API와 DSL 결합
- 프로세서와 트랜스포머
- 모두 조립하기: 리팩토링
- 요약
- 8장. ksqlDB 시작하기
- ksqlDB는 무엇인가?
- 언제 ksqlDB를 사용할까?
- 새로운 데이터베이스로 진화
- 카프카 스트림즈 통합
- 카프카 커넥트 통합
- ksqlDB와 전통적인 SQL 데이터베이스 비교 방법
- 유사점
- 차이점
- 아키텍처
- ksqlDB 서버
- ksqlDB 클라이언트
- 배치 모드
- 대화형 모드
- 헤드리스 모드
- 튜토리얼
- ksqlDB 설치
- ksqlDB 서버 실행
- 토픽 사전 생성
- ksqlDB CLI 사용하기
- 요약
- 9장. ksqlDB로 데이터 통합
- 카프카 커넥트 개요
- 외부 모드와 임베디드 모드
- 외부 모드
- 임베디드 모드
- 커넥트 워커 설정
- 컨버터와 직렬화 포맷
- 튜토리얼
- 커넥터 설치
- 커넥터 생성
- 커넥터 보기
- 커넥터 설명
- 커넥터 삭제
- 소스 커넥터 검증
- 카프카 커넥트 클러스터와 직접 상호 동작
- 관리형 스키마 검사
- 요약
- 10장. ksqlDB 스트림 처리 기초
- 튜토리얼: 넷플릭스의 변경 내용 모니터링
- 프로젝트 설정
- 소스 토픽
- 데이터 타입
- 커스텀 타입
- 컬렉션
- 소스 컬렉션 생성
- WITH 절
- 스트림과 테이블로 작업하기
- 스트림과 테이블 보기
- 스트림과 테이블 설명 보기
- 스트림과 테이블 변경
- 스트림과 테이블 삭제
- 기본 쿼리
- 값 삽입
- 간단한 셀렉트(일시적인 내보내기 쿼리)
- 프로젝션
- 필터링
- 복합 구조체의 평평화/중첩 구조 해체
- 조건식
- COALESCE
- IFNULL
- CASE문
- 카프카로 결과 쓰기(영구적인 쿼리)
- 파생 컬렉션 생성
- 모두 합치기
- 요약
- 11장. ksqlDB 중급, 고급 스트림 처리
- 프로젝트 설정
- SQL 파일로 환경 설정하기
- 데이터 보강
- 조인
- 윈도우 조인
- 집계
- 집계 기초
- 윈도우 집계
- 물리화된 뷰
- 클라이언트
- 가져오기 쿼리
- CURL
- 내보내기 쿼리
- CURL로 내보내기 쿼리 실행
- 함수와 연산자
- 연산자
- 함수 목록 보기
- 함수 설명
- 커스텀 함수 생성
- 추가 참고 자료
- 요약
- 12장. 테스트, 모니터링, 배포
- 테스트
- ksqlDB 쿼리 테스트
- 카프카 스트림즈 테스트
- 행동 테스트
- 벤치마킹
- 카프카 클러스터 벤치마킹
- 테스트 자동화
- 모니터링
- 모니터링 점검 목록
- JMX 메트릭 추출
- 배포
- ksqlDB 컨테이너
- 카프카 스트림즈 컨테이너
- 컨테이너 오케스트레이션
- 운영
- 카프카 스트림즈 재설정
- 애플리케이션 출력 속도 제한
- 카프카 스트림즈 업그레이드
- ksqlDB 업그레이드
- 요약
- 테스트
- 부록 A 스트림즈 설정
- 부록 B ksqlDB 설정
도서 오류 신고
정오표
정오표
[p.30 : 아래에서 6행]
깃허브(https://github.com/mitchseymour/mastering-kafka-streamsand-ksqldb)
->
깃허브(https://github.com/mitch-seymour/mastering-kafka-streams-and-ksqldb)