책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
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는 방대한 주제이므로, 여기서는 이러한 카프카 옵션에 대한 자세한 내용을 스스로 학습하는 데 도움이 될 정도의 세부 정보만 제공한다.
목차
목차
- 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. 클라이언트 예제