Top

카프카 스트림즈와 ksqlDB 정복 [실시간 데이터 처리]

  • 원서명Mastering Kafka Streams and ksqlDB: Building Real-Time Data Systems by Example (ISBN 9781492062493)
  • 지은이미치 시모어(Mitch Seymour)
  • 옮긴이오세봉
  • ISBN : 9791161756929
  • 40,000원
  • 2022년 11월 28일 펴냄
  • 페이퍼백 | 540쪽 | 188*235mm
  • 시리즈 : 클라우드 컴퓨팅

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
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 애플리케이션을 상용 환경에 배포할 때 필요한 정보를 제공한다. 여기에는 모니터링, 테스트 그리고 애플리케이션을 컨테이너화하는 것을 포함한다.

저자/역자 소개

지은이의 말

데이터 엔지니어와 데이터 과학자들에게 주목을 끄는 기술은 항상 넘쳐났다. 좋아하는 서브레딧(subreddit)을 찾아보고, <해커>를 훑어보고, 기술 블로그를 읽거나 기술 콘퍼런스에 참석하는 등 과도하다고 느낄 정도로 무수한 기술들이 차고 넘쳤다.
그러나 집중할 수 있는 조용한 곳에서 모든 잡음을 제거하면 소음으로부터 패턴을 구분할 수 있다. 우리는 폭발적으로 증가하는 데이터 시대를 살고 있고, 대규모 데이터를 저장하고 처리하기 위해 많은 기술이 만들어졌다. 이런 최신 솔루션이 최신 문제를 해결할 수 있다고 하고 혁신적인 것인 양 ‘빅데이터’를 논하고 있지만 이야기의 절반은 데이터의 볼륨에 초점을 맞추고 있다.
데이터 볼륨 문제를 해결하는 기술들은 데이터를 처리할 때 배치 지향적(batch-oriented)인 경향이 있다. 여기에는 일정 기간 동안 쌓인 데이터를 대상으로 잡을 실행하는 것도 포함한다. 어떤 면에서 이는 바다의 모든 물을 한 번에 마시려고 시도하는 것과 같다. 최신 컴퓨팅 파워와 패러다임을 사용하는 몇몇 기술들은 긴 지연 시간을 희생함에도 불구하고 실제로 이를 달성하고자 시도하고 있다.
한편, 최신 데이터는 이 책에서 초점을 맞추고 있는 바와 또 다른 속성을 가지고 있다. 데이터는 네트워크를 통해 안정적이며 무한한 스트림으로 움직이고 있다. 카프카 스트림즈와 ksqlDB와 같은 기술들은 이런 지속적인 데이터 스트림을 실시간으로 처리하도록 특별히 설계돼 있으며, 배치 처리를 뛰어넘는 경쟁적 우위를 제공한다. 만약 데이터를 보강(enrich)하거나 변환(transform), 또는 데이터가 들어오는 순간 가능한 한 빨리 반응하고 싶다면 이 책이 쉽고 효과적으로 알려줄 것이다.
카프카 스트림즈와 ksqlDB를 학습하는 것은 스트림 처리에 포함된 좀 더 큰 개념을 배울 수 있는 좋은 계기가 되기도 한다. 여기에는 데이터를 여러 방식(스트림 또는 테이블)으로 모델링하고, 상태가 없는 데이터 변환, 고급 연산(조인, 집계)에 로컬 상태(local state) 사용, 시간 버킷(buckets)/윈도우(windows)로 데이터를 그룹핑할 때 사용하는 여러 시간 의미(semantics)와 방식에 대한 이해 등을 포함하고 있다. 다시 말해, 카프카 스트림즈와 ksqlDB에 대한 지식은 현존하는 또는 미래 혹은 언젠가 존재할 수 있는 여러 스트림 처리 솔루션을 비교 평가할 때 도움이 될 것이다.
나의 경력에 큰 영향을 미치고 내 자신의 능력 이상으로 기술적 업적에 도달할 수 있도록 도와준 이런 기술을 여러분에게 공유할 수 있게 돼 매우 흥분된다. 사실 여러분이 이 글을 읽을 때쯤 나의 카프카 스트림즈 애플리케이션 중 하나는 이미 9백만 개의 이벤트를 처리했을 것이다. 이 기술을 배우기 위해 많은 시간을 투자하지 않고도 실제 비즈니스에 어떤 가치를 줄 수 있다는 것을 알게 된다면, 앞으로 몇 년 동안 비즈니스 문제 해결에 이 기술을 사용하게 될 것이다. 또한 간결하고 표현력이 풍부한 스트림 데이터 처리 언어는 이런 처리를 노동보다는 예술처럼 느끼게 할 것이다. 인생을 바꾸는 노래 또는 아름다운 그림과 같은 여타 예술적 형식과 마찬가지로, 이를 공유하고자 하는 행위는 인간의 본성이다. 따라서 이 책은 여러분에게 즐거움을 제공하기 위해 스트림 처리 공간에서 내가 가장 좋아하는 것만 편집해 놓은 믹스 테이프라고 생각하기 바란다.

지은이 소개

미치 시모어(Mitch Seymour)

메일침프 데이터 서비스 팀의 엔지니어이자 기술 책임자다. 카프카 스트림즈와 ksqlDB를 사용해 하루에 수십억 개의 이벤트를 초 미만의 지연 시간으로 처리하는 많은 스트림 처리 애플리케이션을 구축했다. 오픈 소스 커뮤니티에서 활동하고 있으며, 국제 컨퍼런스(카프카 서밋 런던, 2019)에서 스트림 처리 기술에 대해 발표했다. 지역 밋업에서 카프카 스트림즈와 ksqlDB를 주제로 강연하고 있으며 컨플루언트 블로그에 기고하고 있다.

옮긴이의 말

카프카 기반의 스트림 데이터 처리 애플리케이션을 개발하고 유지 보수한 지 어느덧 5년이 흘렀다. 처음 몇 개로 시작한 스트리밍 처리 애플리케이션은 그 증가 속도가 가파르게 빨라지고 있으며, 이 일을 함께하는 동료들도 많이 늘어났다. 스트리밍 처리 기술도 이 책의 카프카 스트림즈와 ksqlDB뿐만 아니라 아파치 플링크, 스파크 스트리밍 등 다양해지고 있다.
아마도 이 책을 선택한 독자들 중에는 이런 여러 스트리밍 데이터 처리 기술을 서로 비교해보고 싶은 분도 있을 수 있고, 스트리밍 데이터 처리 기술이 처음이라 익숙한 SQL이라는 단어에 이끌려 이 책을 선택한 분도 있을 수 있다. 이 책은 이런 두 목적을 가진 독자들을 모두 만족시킬 수 있는 내용으로 구성돼 있다.
1부에서는 스트리밍 데이터 처리의 기본 개념들과 카프카 스트림즈의 구현 원리를 상세히 설명하고 있다. 1부를 읽고 나면 여러분도 “스트림 데이터에서의 시간”, “윈도우”, “집계”, “상태가 있는 스트리밍 데이터 처리” 등 기본적인 스트림 데이터 처리에 관해 많은 지식을 쌓을 수 있다. 따라서 개발자가 아니더라도 스트림 데이터 처리에 대한 일반적인 지식이 필요한 독자라면 1부를 꼭 읽어 보길 바란다. 2부에서는 1부의 내용을 바탕으로 ksqlDB를 상세히 다루고, 3부는 상용화에 필요한 여러 준비 사항과 단계 등 실무적인 내용을 설명한다. 이 책을 모두 읽고 나면 스트리밍 데이터의 기초부터 고급까지 모두 익힐 수 있게 되며, 실습과 함께 연습하다 보면 바로 실무에 적용할 수 있는 수준까지 다다르리라 기대한다.
개인적으로 이 책을 번역하면서 아파치 플링크와 카프카 스트림즈와 ksqlDB의 차이점에 대해 비교할 수 있는 좋은 기회가 됐다. 두 기술 모두 대부분의 기본 개념은 비슷하나 구현 방법이나 데이터 추상화 개념, 상태 관리 등에서 차이가 있었다. 어느 것이 더 낫고 부족한지는 여러분의 요구 사항에 따라 다르며, 아파치 플링크와 카프카 스트림즈를 비교해보고 싶은 독자가 있다면 에이콘출판사의 『아파치 플링크로 하는 스트림 데이터 처리』(2020)를 참고하는 것도 좋다. 이 책에서는 전달 보증(Delivery Guarantee)과 같은 스트리밍 데이터를 처리할 때 매우 중요한 다른 개념들도 소개하고 있으므로 기회가 닿으면 꼭 읽어 보길 추천한다.
서비스를 사용하는 고객은 점점 더 빠르고 정확한 반응을 원하고 있으며, 일괄 처리로는 이런 요구를 반영할 수 없다. 빅데이터 처리 분야에서 스트리밍 데이터 처리는 이제 선택이 아닌 필수가 돼 가는 느낌이다. 이 책을 선택한 여러분도 이번 기회에 변화하는 기술에 뒤처지지 않고 스트리밍 처리 분야의 전문가가 되길 희망한다.

옮긴이 소개

오세봉

티맥스 소프트, 넥스알 등을 거치며 WAS, 빅데이터의 기술을 경험했다. 지금은 SK텔레콤에서 매일 수천억 건의 스트림 데이터를 카프카와 여러 스트리밍 기술로 처리하고 있다.

목차

목차
  • 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.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[p.30 : 아래에서 6행]
깃허브(https://github.com/mitchseymour/mastering-kafka-streamsand-ksqldb)
->
깃허브(https://github.com/mitch-seymour/mastering-kafka-streams-and-ksqldb)