Kafka?
- streaming을 처리하기위한 분산 platform
- high-performance
- 제조,은행,텔레콤등 많은 큰 회사들이 사용한다.
1. 기본구조

1) 전체구조
- 카프카 클러스터
- 메시지를 저장하는 저장소
- 여러개의 브로커로 구성되어있다.
- 주키퍼
- 프로듀서
- 컨슈머
2) 토픽과 파티션

- 토픽: 메시지를 구분하는 단위(폴더와 비슷한 역할)
- 뉴스 토픽, 주식 토픽 등 메시지를 알맞게 구분하기위해 사용
- 한개의 토픽은 한개 이상의 파티션으로 구성
- 프로듀서와 컨슈머는 토픽을 기준으로 메시지를 주고받는다.
3) 파티션과 오프셋, 메시지 순서

- 파티션은 추가만 가능한(append-only) 파일
- 각 메시지 저장 위치를 offset이라고 한다.
- 프로듀서가 넣은 메시지는 파티션의 맨 뒤에 추가 된다.
- 컨슈머는 오프셋 기준으로 메시지를 순서대로 읽는다.
- 메시지는 삭제되지 않는다.
4) 여러 파티션과 프로듀서

- 프로듀서는 라운드로빈 또는 key로 파티션을 선택한다.
- 같은 key를 갖는 메시지는 같은 파티션에 저장 -> 칻은 키는 순서 유지
5) 여러 파티션과 컨슈머

- 컨슈머는 컨슈머 그룹에 속한다.
- 한개의 파티션은 컨슈머그룹의 한개 컨슈머만 연결이 가능
- 즉, 컨슈머 그룹에 속한 컨슈머들은 한 파티션을 공유할 수 없음
- 한 컨슈머그룹 기준으로 파티션의 메시지는 순서대로 처리된다.
6) 성능

7) 리플리카 - 복제

- 리플리카: 파티션의 복제본
- 복제수 만큼 파티션의 복제본이 각각 브로커에 생김
- 리더와 팔로워로 구성
- 프로듀서와 컨슈머는 리더를 통해서만 메시지 처리
- 팔로워는 리더로 부터 복제
- 장애 대응
- 리더가 속산 브로커 장치에 다른팔로워가 리더가됨.
Reference
https://www.youtube.com/watch?v=0Ssx7jJJADI