Top

Kafka in Action [예제로 마스터하는 카프카 스트리밍 플랫폼]

  • 원서명Kafka in Action (ISBN 9781617295232)
  • 지은이딜런 스콧(Dylan Scott), 빅토르 가모프(Viktor Gamov), 데이브 클라인(Dave Klein)
  • 옮긴이최중연
  • ISBN : 9791161757919
  • 30,000원
  • 2023년 10월 30일 펴냄
  • 페이퍼백 | 348쪽 | 188*235mm
  • 시리즈 : 클라우드 컴퓨팅

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/kafka-in-action

요약

아파치 카프카는 이벤트 스트리밍, 로깅, 분석, 기타 데이터 파이프라인 작업을 용이하게 하는 고성능 소프트웨어 버스라고 생각하면 된다. 카프카를 사용하면 운영 데이터 모니터링 및 대규모 이벤트 처리 같은 기능을 대규모 및 소규모 애플리케이션 모두에 쉽게 구축할 수 있다.
이 책에서는 실제 애플리케이션에서 사용하는 방법과 관련된 예제와 함께 카프카의 핵심 기능을 소개하며, 스트리밍 데이터 로깅과 관리 같은 가장 일반적인 사용 사례를 살펴본다. 이 과정을 마치고 나면 카프카를 중심으로 구성된 팀에서 기본적인 개발자 및 관리자 기반 작업을 모두 처리할 준비가 된 셈이다.

추천의 글

"이 책의 저자들은 다년간의 실제 카프카 사용 경험을 바탕으로 집필했으며, 이 책의 차별화된 부분은 바로 이러한 현장감이다."
─ 준 라오(Jun Rao)
, 컨플루언트(Confluent) 공동 창립자

"매우 복잡한 기술을 놀라울 정도로 이해하기 쉽게 소개하고 있다. 개발자들은 이 책을 가까이에 두고 싶을 것이다."
─ 코너 레드몬드(Conor Redmond)
, 인컴 페이먼츠(InComm Payments)

"카프카와 생태계에 대한 포괄적이고 실용적인 가이드다."
─ 수만트 탐베(Sumant Tambe),
링크드인(Linkedin)

"카프카의 작동 방식과 분산 메시지 애플리케이션을 설계하고 보호하는 방법에 대한 통찰력을 빠르게 얻을 수 있었다."
─ 그레고르 레이먼(Gregor Rayman)
, 클라우드팜스(Cloudfarms)

이 책에서 다루는 내용

◆ 이벤트 스트리밍 플랫폼으로서의 카프카
◆ 자바 애플리케이션에서의 카프카 프로듀서 및 컨슈머
◆ 대규모 데이터 프로젝트의 일부로서의 카프카

이 책의 대상 독자

스트림 처리를 배우고자 하는 모든 개발자를 위한 책이다. 카프카에 대한 사전 지식은 필요하지 않지만, 기본적인 명령줄/터미널 지식이 있으면 도움이 된다. 카프카에는 우리가 사용할 강력한 명령줄 도구가 있으며, 사용자는 최소한 명령줄 프롬프트에서 탐색할 수 있어야 한다.
약간의 자바 언어 기술이나 모든 언어의 프로그래밍 개념을 인식할 수 있는 능력이 있으면 이 책을 최대한 활용하는 데 도움이 될 수 있다. 주로 자바 11(및 자바 8) 코딩 스타일로 제시된 코드 예제를 이해하는 데 도움이 될 것이다. 필수는 아니지만 분산 애플리케이션 아키텍처에 대한 일반적인 지식도 있으면 도움이 된다. 예를 들어, 사용자가 복제 및 장애에 대해 더 많이 알고 있을수록 카프카가 레플리카를 사용하는 방법을 더 쉽게 배울 수 있다.

이 책의 구성

1부에서는 카프카의 멘탈 모델을 소개하고 실제 세계에서 카프카를 사용하는 이유에 대해 이야기한다.
1장, ‘카프카 소개’에서는 카프카를 소개하며, 몇 가지 오해에 대한 반박 및 실제 사용 사례를 설명한다.
2장, ‘카프카 알아보기’에서는 상위 수준의 카프카 아키텍처와 주요 용어를 살펴본다.

2부에서는 카프카의 핵심적인 부분으로 이동한다. 여기에는 클러스터 자체뿐만 아니라 클라이언트도 포함된다.
3장, ‘카프카 프로젝트 설계’에서는 카프카가 프로젝트에 적합한 경우와 새 프로젝트 설계에 접근하는 방법을 살펴본다. 또한 스키마의 필요성을 나중이 아니라 카프카 프로젝트를 시작할 때의 고려해야 할 사항으로 논의한다.
4장, ‘프로듀서: 데이터 공급’에서는 프로듀서 클라이언트를 생성하는 방법과 데이터가 카프카 클러스터에 들어가는 방식에 영향을 주기 위해 사용할 수 있는 옵션을 자세히 살펴본다.
5장, ‘컨슈머: 데이터 열기’에서는 컨슈머 클라이언트를 사용해 카프카에서 데이터를 가져오는 방법을 살펴본다. 보존된 메시지의 저장 측면을 활용할 수 있기 때문에 오프셋과 데이터 재처리라는 개념을 소개한다.
6장, ‘브로커’에서는 클러스터에서 브로커의 역할과 브로커가 클라이언트와 상호 작용하는 방식을 살펴본다. 컨트롤러와 레플리카 같은 다양한 구성 요소를 살펴본다.
7장, ‘토픽과 파티션’에서는 토픽과 파티션의 개념을 살펴본다. 여기에는 토픽이 컴팩션되는 방식과 파티션이 저장되는 방식이 포함된다.
8장, ‘카프카 스토리지’에서는 보존하거나 재처리해야 하는 데이터를 처리하기 위한 옵션인 도구와 아키텍처에 대해 설명한다. 수개월 또는 수년간 데이터를 보존해야 하는 경우 클러스터 외부의 스토리지 옵션을 평가해야 할 수도 있다.
9장, ‘관리: 도구와 로깅’에서는 클러스터를 정상적으로 유지하는 데 필요한 로그, 메트릭, 관리 업무를 검토하면서 2부를 마무리한다.

3부에서는 카프카의 핵심적인 부분을 살펴보고, 실행 중인 클러스터를 개선하기 위한 옵션으로 넘어간다.
10장, ‘카프카 보호’에서는 SSL, ACL, 할당량 같은 기능을 사용해 카프카 클러스터를 강화하는 옵션을 소개한다.
11장, ‘스키마 레지스트리’에서는 스키마 레지스트리와 스키마 레지스트리를 사용해 데이터의 이전 버전 및 향후 버전 데이터셋과의 호환성을 유지하면서 데이터를 발전시키는 방법을 자세히 살펴본다. 이 기능은 엔터프라이즈급 애플리케이션에서 가장 많이 사용되는 기능으로 알려져 있지만, 시간이 지남에 따라 진화하는 모든 데이터에 유용할 수 있다.
마지막으로 12장, ‘카프카 스트림즈와 ksqlDB를 활용한 스트림 처리’에서는 카프카 스트림과 ksqlDB를 소개한다. 이러한 제품들은 2부에서 학습한 핵심을 기반으로 구축된 더 높은 수준의 추상화다. 카프카 스트림즈와 ksqlDB는 방대한 주제이므로, 여기서는 이러한 카프카 옵션에 대한 자세한 내용을 스스로 학습하는 데 도움이 될 정도의 세부 정보만 제공한다.

저자/역자 소개

지은이의 말

기술 서적에 대해 이야기할 때 자주 받는 질문 중 하나는 왜 서면 형식이냐는 것이다. 적어도 딜런에게 독서는 항상 그가 선호하는 학습 스타일의 일부였다. 또 다른 요인은 그가 처음 읽었던 실용적인 프로그래밍 책인 앤드루 존슨(Andrew L. Johnson)의 『Elements of Programming with Perl』(Manning, 2000)을 기억하는 향수 때문이기도 하다. 책 내용이 깊은 인상을 남겼고, 다른 저자와 함께 페이지를 하나씩 넘기는 것이 즐거웠다. 아파치 카프카로 작업하며 읽었던 자료에서 일부 실용적인 내용을 이 책에 담으려고 한다.
카프카로 처음 작업을 시작했을 때 새로운 것을 배운다는 설렘이 우리를 감동시켰다. 우리가 생각했을 때 카프카는 이전에 사용했던 다른 메시지 브로커나 엔터프라이즈 서비스 버스(ESB, Enterprise Service Bus)와는 달랐다. 우리가 발견한 가장 큰 문제점을 해결하기 위한 선택지로 카프카를 살펴보기 시작했을 때, 빠른 프로듀서와 컨슈머 개발 속도, 데이터를 재처리할 수 있는 능력, 독립적인 컨슈머가 다른 컨슈머 애플리케이션에서 데이터를 제거하지 않고도 공유할 수 있는 능력과 같은 옵션들이 우리를 감동시켰다.
우리는 카프카가 데이터 플랫폼의 표준을 바꿀 것으로 보고 있으며, 카프카는 배치 및 ETL 워크플로를 실시간 데이터 피드에 가깝게 바꾸는 데 도움을 줄 수 있다. 이러한 기반은 많은 엔터프라이즈 사용자에게 익숙한 과거의 데이터 아키텍처로부터의 변화일 가능성이 높기 때문에, 카프카에 대한 사전지식이 없는 사용자가 카프카 프로듀서와 컨슈머로 작업을 하고, 기본적인 카프카 개발자 역할과 관리 작업을 수행할 수 있는 능력을 개발할 수 있도록 하고 싶었다. 학습이 끝날 무렵에는 새로운 핵심 카프카 지식을 바탕으로 클러스터 모니터링, 메트릭, 다중 사이트 데이터 복제와 같은 고급 카프카 주제를 편안하게 파고들 수 있기를 바란다.
이 책은 오늘날 카프카의 모습 중 어느 한 순간을 포착하고 있음을 항상 기억하자. 여러분이 이 책을 읽을 때쯤이면 카프카는 더 나은 모습으로 변화하고 있을 것이다. 아파치 카프카의 기초를 배우는 즐거운 여정에 도움이 되기를 바란다.

지은이 소개

딜런 스콧(Dylan Scott)

자바와 펄 분야에서 10년 이상의 경력을 쌓은 소프트웨어 개발자다. 대규모 데이터 마이그레이션을 위한 메시징 시스템으로 카프카를 사용하기 시작한 후, 카프카와 스트림 처리의 세계에 대해 더 깊이 파고들기 시작했다. 뮬(Mule), 래빗MQ(RabbitMQ), MQSeries, 카프카 등 다양한 기술과 큐를 사용했다.
업계에서의 경험을 보여주는 PMP, ITIL, CSM, Sun Java SE 1.6, Oracle Web EE6, Neo4j, Jenkins Engineer 등의 다양한 자격증을 보유하고 있다.

빅토르 가모프(Viktor Gamov)

아파치 카프카를 기반으로 이벤트 스트리밍 플랫폼을 만드는 회사인 컨플루언트(Confluent)에서 개발자와 개발자 커뮤니티를 대상으로 정보를 전달하는 대변인 역할을 하고 있다. 경력 전반에 걸쳐 오픈소스 기술을 사용해 엔터프라이즈 애플리케이션 아키텍처를 구축하는 데 필요한 포괄적인 전문지식을 쌓았다. 아키텍트와 개발자가 지연 시간이 짧고 확장 가능하며 가용성이 높은 분산 시스템을 설계하고 개발하도록 돕는 것을 즐긴다. 분산 시스템, 스트리밍 데이터, JVM, 데브옵스(DevOps) 주제에 대한 전문 콘퍼런스 연사이며, JavaOne, Devoxx, OSCON, QCon 등의 이벤트에서 단골 연사로 활동 중이다. 또한 『Enterprise Web Development』(O'Reilly, 2014)의 공동 저자다.

데이브 클라인(Dave Klein)

28년간 개발자, 건축가, 프로젝트 관리자(복직), 작가, 트레이너, 콘퍼런스 주최자, 홈스쿨링 아빠로 일하다가 최근 꿈에 그리던 컨플루언트의 개발자 지원 담당자로 자리를 잡았다. 아파치 카프카를 통한 이벤트 스트리밍의 놀라운 세계에 감탄하고 있으며, 다른 사람들이 이 놀라운 세계를 탐험할 수 있도록 돕고 싶어 한다.

옮긴이의 말

아파치 카프카는 분산형 이벤트 스트리밍 플랫폼으로, 대용량 데이터를 처리하고 실시간으로 스트리밍하는 데 사용되는 강력한 핵심 도구 중 하나다. 카프카는 링크드인에서 개발됐으며, 현재는 아파치 소프트웨어 재단의 오픈소스 프로젝트로 관리되고 있다. 아파치 카프카는 실시간 데이터 파이프라인, 이벤트 스트리밍, 로그 집계 등 다양한 애플리케이션과 시스템에서 사용되며, 대규모 기업부터 스타트업까지 다양한 조직에서 활발하게 사용되고 있다.
컴퓨팅 분야의 유행은 마치 패션처럼 빠르게 변화한다. 그러나 2011년 첫 출시 이후 지금도 메시지 큐와 메시지 버스 영역에서는 아파치 카프카가 여전히 주요 플랫폼으로 남아 있으며, 스트리밍 플랫폼으로 빠르게 확장되고 있다. 과거에도 아파치 카프카는 스트림 처리가 가능했지만, 스톰, 플링크, 스파크 등과 결합하여 스트림 처리를 확장했던 시기도 있었다. 그러나 현재는 프로듀서 및 컨슈머 개념과 이를 확장하여 구현한 카프카 스트림즈만으로도 대용량 실시간 스트리밍 처리를 프로덕션 환경에 성공적으로 적용하고 있다.
프로덕션 환경에서 아파치 카프카를 이용해 데이터를 처리할 때는, 처리해야 할 데이터 규모와 별개로 여러 지식들을 배우고 고려해야 한다. 스프링 카프카 같은 잘 정의된 고수준 API를 사용하면 빠르게 필요한 애플리케이션 개발을 완료할 수 있다. 그러나 서비스가 느려지거나 실패할 때 카프카 클러스터뿐만 아니라 클라이언트의 저수준 API가 작동하는 원리를 이해하지 못한다면 서비스 정상화가 지연될 뿐만 아니라 이러한 문제를 미연에 방지할 수도 없을 것이다.
이 책은 아파치 카프카를 활용하여 애플리케이션을 개발하는 과정에서 필요한 기본 개념을 예제와 함께 설명하며, 독자의 이해를 점진적으로 높이기 위해 클라이언트, 서버, 카프카 생태계 등을 차례대로 다룬다. 이 과정을 진행하면서 아파치 카프카의 장점뿐만 아니라 한계에 대해서도 인사이트를 얻어 안정적인 프로덕션 애플리케이션을 개발하고 운영하는 데 도움이 되기를 기대한다.

옮긴이 소개

최중연

엔터프라이즈 환경에서 쿠버네티스 기반 카프카 클러스터를 제공하는 서비스를 개발 및 운영하고 있으며, 운영자 개입이 최소화되고 자동으로 관리되는 완전 관리형 서비스(Full managed service) 설계에 관심이 많다. 번역서로는 에이콘출판사에서 펴낸 『일래스틱 스택을 이용한 머신러닝 2/e』(2022), 『일래스틱 스택을 이용한 머신러닝』(2020), 『Kafka Streams in Action』(2019), 『일래스틱서치 쿡북 3/e』(2019), 『키바나 5.0 배우기』(2017), 『Elasticsearch in Action』(2016) 등이 있다.

목차

목차
  • 1부. 시작하기
  • 1장. 카프카 소개
  • 1.1 카프카의 특징
  • 1.2 카프카 사용
  • 1.2.1 개발자를 위한 카프카
  • 1.2.2 매니저에게 카프카 설명하기
  • 1.3 카프카에 관한 오해
  • 1.3.1 카프카는 하둡과만 함께 작동한다
  • 1.3.2 카프카는 다른 메시지 브로커와 동일하다
  • 1.4 현실 세계에서의 카프카
  • 1.4.1 초기의 사용 사례
  • 1.4.2 이후의 사용 사례
  • 1.4.3 카프카가 적합하지 않을 수 있는 경우
  • 1.5 시작하기 위한 온라인 리소스
  • 요약
  • 참고문헌

  • 2장. 카프카 알아보기
  • 2.1 메시지 생산과 소비
  • 2.2 브로커란 무엇인가?
  • 2.3 카프카 투어
  • 2.3.1 프로듀서와 컨슈머
  • 2.3.2 토픽 개요
  • 2.3.3 주키퍼의 용도
  • 2.3.4 카프카의 고가용성 아키텍처
  • 2.3.5 커밋 로그
  • 2.4 다양한 소스 코드 패키지와 역할
  • 2.4.1 카프카 스트림즈
  • 2.4.2 카프카 커넥트
  • 2.4.3 AdminClient 패키지
  • 2.4.4 ksqlDB
  • 2.5 컨플루언트 클라이언트
  • 2.6 스트림 처리와 용어
  • 2.6.1 스트림 처리
  • 2.6.2 정확히 한 번의 의미
  • 요약
  • 참고문헌

  • 2부. 카프카 적용
  • 3장. 카프카 프로젝트 설계
  • 3.1 카프카 프로젝트 설계
  • 3.1.1 기존 데이터 아키텍처 인수
  • 3.1.2 첫 변경
  • 3.1.3 내장 기능
  • 3.1.4 주문 송장을 위한 데이터
  • 3.2 센서 이벤트 설계
  • 3.2.1 기존 문제
  • 3.2.2 카프카가 적합한 이유
  • 3.2.3 우리 설계에 대한 생각의 시작점
  • 3.2.4 사용자 데이터 요구사항
  • 3.2.5 질문을 적용하기 위한 상위 수준 계획
  • 3.2.6 청사진 검토
  • 3.3 데이터 형식
  • 3.3.1 데이터를 위한 계획
  • 3.3.2 의존성 설정
  • 요약
  • 참고문헌

  • 4장. 프로듀서: 데이터 공급
  • 4.1 예제
  • 4.1.1 프로듀서 설명
  • 4.2 프로듀서 옵션
  • 4.2.1 브로커 목록 구성
  • 4.2.2 더 빨리(또는 안전하게) 처리하기
  • 4.2.3 타임스탬프
  • 4.3 요구사항에 대한 코드 생성
  • 4.3.1 클라이언트와 브로커 버전
  • 요약
  • 참고문헌

  • 5장. 컨슈머: 데이터 열기
  • 5.1 예제
  • 5.1.1 컨슈머 옵션
  • 5.1.2 코디네이트 이해
  • 5.2 컨슈머가 상호 작용하는 방식
  • 5.3 추적
  • 5.3.1 그룹 코디네이터
  • 5.3.2 파티션 할당 전략
  • 5.4 작업 위치 표시
  • 5.5 컴팩션된 토픽에서 읽기
  • 5.6 우리 공장의 요구사항에 대한 코드 검색
  • 5.6.1 읽기 옵션
  • 5.6.2 요구사항
  • 요약
  • 참고문헌

  • 6장. 브로커
  • 6.1 브로커 소개
  • 6.2 주키퍼의 역할
  • 6.3 브로커 수준의 옵션
  • 6.3.1 카프카의 다른 로그: 애플리케이션 로그
  • 6.3.2 서버 로그
  • 6.3.3 상태 관리
  • 6.4 파티션 리더 레플리카와 그 역할
  • 6.4.1 데이터 손실
  • 6.5 카프카 엿보기
  • 6.5.1 클러스터 유지 관리
  • 6.5.2 브로커 추가
  • 6.5.3 클러스터 업그레이드
  • 6.5.4 클라이언트 업그레이드
  • 6.5.5 백업
  • 6.6 상태 저장 시스템에 대한 참고사항
  • 6.7 실습
  • 요약
  • 참고문헌

  • 7장. 토픽과 파티션
  • 7.1 토픽
  • 7.1.1 토픽 생성 옵션
  • 7.1.2 복제 팩터
  • 7.2 파티션
  • 7.2.1 파티션 위치
  • 7.2.2 로그 보기
  • 7.3 EmbeddedKafkaCluster를 사용한 테스트
  • 7.3.1 카프카 Testcontainers 사용
  • 7.4 토픽 컴팩션
  • 요약
  • 참고문헌

  • 8장. 카프카 스토리지
  • 8.1 데이터 저장기간
  • 8.2 데이터 이동
  • 8.2.1 원본 이벤트 유지
  • 8.2.2 배치 사고방식에서 벗어나기
  • 8.3 도구
  • 8.3.1 아파치 플룸
  • 8.3.2 레드햇 데베지움
  • 8.3.3 보안
  • 8.3.4 데이터 저장을 위한 사용 사례의 예
  • 8.4 카프카로 데이터를 다시 가져오기
  • 8.4.1 계층화된 스토리지
  • 8.5 카프카를 사용한 아키텍처
  • 8.5.1 람다 아키텍처
  • 8.5.2 카파 아키텍처
  • 8.6 다중 클러스터 설정
  • 8.6.1 클러스터 추가를 통한 확장
  • 8.7 클라우드 및 컨테이너 기반 스토리지 옵션
  • 8.7.1 쿠버네티스 클러스터
  • 요약
  • 참고문헌

  • 9장. 관리: 도구와 로깅
  • 9.1 관리 클라이언트
  • 9.1.1 AdminClient를 사용한 코드 관리
  • 9.1.2 kcat
  • 9.1.3 컨플루언트 REST 프록시 API
  • 9.2 카프카를 systemd 서비스로 실행하기
  • 9.3 로깅
  • 9.3.1 카프카 애플리케이션 로그
  • 9.3.2 주키퍼 로그
  • 9.4 방화벽
  • 9.4.1 애드버타이즈드 리스너
  • 9.5 메트릭
  • 9.5.1 JMX 콘솔
  • 9.6 추적 옵션
  • 9.6.1 프로듀서 로직
  • 9.6.2 컨슈머 로직
  • 9.6.3 클라이언트 재정의
  • 9.7 일반 모니터링 도구
  • 요약
  • 참고문헌

  • 3부. 더 나아가기
  • 10장. 카프카 보호
  • 10.1 보안 기본 사항
  • 10.1.1 SSL을 사용한 암호화
  • 10.1.2 브로커와 클라이언트 간의 SSL
  • 10.1.3 브로커 간 SSL
  • 10.2 커버로스 및 SASL
  • 10.3 카프카에서의 권한 부여
  • 10.3.1 접근 제어 목록(ACL)
  • 10.3.2 역할 기반 접근 제어(RBAC)
  • 10.4 주키퍼
  • 10.4.1 커버로스 설정
  • 10.5 할당량
  • 10.5.1 네트워크 대역폭 할당량
  • 10.5.2 요청 속도 할당량
  • 10.6 저장된 데이터
  • 10.6.1 관리형 옵션
  • 요약
  • 참고문헌

  • 11장. 스키마 레지스트리
  • 11.1 제안된 카프카 성숙도 모델
  • 11.1.1 레벨 0
  • 11.1.2 레벨 1
  • 11.1.3 레벨 2
  • 11.1.4 레벨 3
  • 11.2 스키마 레지스트리
  • 11.2.1 컨플루언트 스키마 레지스트리 설치
  • 11.2.2 레지스트리 구성
  • 11.3 스키마 기능
  • 11.3.1 REST API
  • 11.3.2 클라이언트 라이브러리
  • 11.4 호환성 규칙
  • 11.4.1 스키마 수정 유효성 검사
  • 11.5 스키마 레지스트리의 대안
  • 요약
  • 참고문헌

  • 12장. 카프카 스트림즈와 ksqlDB를 활용한 스트림 처리
  • 12.1 카프카 스트림즈
  • 12.1.1 KStreams API DSL
  • 12.1.2 KTable API
  • 12.1.3 GlobalKTable API
  • 12.1.4 프로세서 API
  • 12.1.5 카프카 스트림즈 설정
  • 12.2 ksqlDB: 이벤트 스트리밍 데이터베이스
  • 12.2.1 쿼리
  • 12.2.2 로컬 개발
  • 12.2.3 ksqlDB 아키텍처
  • 12.3 더 나아가기
  • 12.3.1 카프카 개선 제안(KIP)
  • 12.3.2 탐색할 수 있는 카프카 프로젝트
  • 12.3.3 커뮤니티 슬랙 채널
  • 요약
  • 참고문헌

  • 부록 A. 설치
  • 부록 B. 클라이언트 예제

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안