Description
아파치 카프카는 고성능 소프트웨어 버스로, 이벤트 스트리밍, 로깅, 분석 및 데이터 파이프라인 작업을 빠르게 처리하며, 아파치 카프카를 사용하면 운영 데이터 모니터링과 함께 대규모 이벤트 처리 애플리케이션을 쉽게 구축할 수 있다.
이 책은 실제 애플리케이션에서의 아파치 카프카 활용 방법과 예제를 통해 아파치 카프카의 주요 기능을 소개하며, 스트리밍 데이터 로깅, 관리와 같은 가장 일반적인 사용 사례도 다룬다. 자바 개발자와 데이터 엔지니어를 대상으로 하며, 아파치 카프카에 대한 사전 지식은 필요하지 않다.

저자

딜런스콧,빅토르가모프,데이브클라인

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

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

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

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

목차


1부.시작하기
01장.카프카소개
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시작하기위한온라인리소스
요약
참고문헌

02장.카프카알아보기
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.3AdminClient패키지
2.4.4ksqlDB
2.5컨플루언트클라이언트
2.6스트림처리와용어
2.6.1스트림처리
2.6.2정확히한번의의미
요약
참고문헌

2부.카프카적용
03장.카프카프로젝트설계
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의존성설정
요약
참고문헌

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

05장.컨슈머:데이터열기
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요구사항
요약
참고문헌


06장.브로커
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실습
요약
참고문헌

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

08장.카프카스토리지
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쿠버네티스클러스터
요약
참고문헌

09장.관리:도구와로깅
9.1관리클라이언트
9.1.1AdminClient를사용한코드관리
9.1.2kcat
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.1JMX콘솔
9.6추적옵션
9.6.1프로듀서로직
9.6.2컨슈머로직
9.6.3클라이언트재정의
9.7일반모니터링도구
요약
참고문헌

3부.더나아가기
10장.카프카보호
10.1보안기본사항
10.1.1SSL을사용한암호화
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.1RESTAPI
11.3.2클라이언트라이브러리
11.4호환성규칙
11.4.1스키마수정유효성검사
11.5스키마레지스트리의대안
요약
참고문헌

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

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

출판사 서평

이책에서다루는내용

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

이책의대상독자

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

이책의구성

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

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

지은이의말

기술서적에대해이야기할때자주받는질문중하나는왜서면형식이냐는것이다.적어도딜런에게독서는항상그가선호하는학습스타일의일부였다.또다른요인은그가처음읽었던실용적인프로그래밍책인앤드루존슨(AndrewL.Johnson)의『ElementsofProgrammingwithPerl』(Manning,2000)을기억하는향수때문이기도하다.책내용이깊은인상을남겼고,다른저자와함께페이지를넘기는것이즐거웠다.아파치카프카로작업하며읽었던자료에서일부실용적인내용을이책에담으려고한다.카프카로처음작업을시작했을때새로운것을배운다는설렘이우리를감동시켰다.우리가생각했을때카프카는이전에사용했던다른메시지브로커나엔터프라이즈서비스버스(ESB,EnterpriseServiceBus)와는달랐다.우리가발견한가장큰문제점을해결하기위한선택지로카프카를살펴보기시작했을때,빠른프로듀서와컨슈머개발속도,데이터를재처리할수있는능력,독립적인컨슈머가다른컨슈머애플리케이션에서데이터를제거하지않고도공유할수있는능력과같은옵션들이우리를감동시켰다.

우리는카프카가데이터플랫폼의표준을바꿀것으로보고있으며,카프카는배치및ETL워크플로를실시간데이터피드에가깝게바꾸는데도움을줄수있다.이러한기반은많은엔터프라이즈사용자에게익숙한과거의데이터아키텍처로부터의변화일가능성이높기때문에,카프카에대한사전지식이없는사용자가카프카프로듀서와컨슈머로작업을하고,기본적인카프카개발자역할과관리작업을수행할수있는능력을개발할수있도록하고싶었다.학습이끝날무렵에는새로운핵심카프카지식을바탕으로클러스터모니터링,메트릭,다중사이트데이터복제와같은고급카프카주제를편안하게파고들수있기를바란다.오늘날카프카의모습중어느한순간을포착하고있음을항상기억하자.이책을읽을때쯤이면카프카는더나은모습으로변화하고있을것이다.아파치카프카의기초를배우는즐거운여정에도움이되기를바란다.

옮긴이의말

아파치카프카는분산형이벤트스트리밍플랫폼으로,대용량의데이터를처리하고실시간으로스트리밍하는데사용되는강력한핵심도구중하나다.카프카는링크드인에서개발되었으며,현재는아파치소프트웨어재단의오픈소스프로젝트로관리되고있다.아파치카프카는실시간데이터파이프라인,이벤트스트리밍,로그집계등다양한애플리케이션과시스템에서사용되며,대규모기업부터스타트업까지다양한조직에서활발하게사용되고있다.컴퓨팅분야에서의유행은마치패션처럼빠르게변화한다.그러나2011년첫출시이후지금도메시지큐와메시지버스영역에서는아파치카프카가여전히주요플랫폼으로남아있으며,스트리밍플랫폼으로빠르게확장되고있다.과거에도아파치카프카는스트림처리가가능했지만,스톰,플링크,스파크등과결합하여스트림처리를확장했던시기도있었다.그러나현재는프로듀서및컨슈머개념과이를확장하여구현한카프카스트림즈만으로도대용량실시간스트리밍처리를프로덕션환경에성공적으로적용하고있다.

프로덕션환경에서아파치카프카를이용해데이터를처리할때는처리해야할데이터의규모와별개로여러지식들을배우고고려해야한다.스프링카프카같은잘정의된고수준API를사용하면빠르게필요한애플리케이션개발을완료할수있다.그러나서비스가느려지거나실패할때카프카서버뿐만아니라클라이언트의저수준API가작동하는원리를이해하지못한다면서비스정상화가지연될뿐만아니라이러한문제를미연에방지할수도없을것이다.이책은아파치카프카를활용하여애플리케이션을개발하는과정에서필요한기본개념들을예제와함께설명하며,독자의이해를점진적으로높이기위해클라이언트,서버,카프카생태계등을차례대로다룬다.이과정을진행하면서아파치카프카의장점뿐만아니라한계에대해서도인사이트를얻어안정적인프로덕션애플리케이션을개발하고운영하는데도움이되기를기대한다.