카프카의 사전 정의
분산 이벤트 스트리밍 플랫폼입니다.
기본 구조

여러개의 브로커는 데이터를 이중화 하거나 리더와 팔로워 구조를 이루며
카프카 클러스터에서 관리됩니다.
토픽과 파티션

토픽
- 토픽은 메세지를 구분하는 단위입니다.
- 한 개의 토픽은 한 개 이상의 파티션으로 구성되어 있습니다.
파티션
- 파티션은 메세지를 저장하는 물리적인 파일을 칭합니다.
- 추가만 가능한 (append-only) 파일입니다.
- 각 메세지의 저장되는 위치를 offset 이라고 합니다.
- 프로듀서가 넣은 메세지는 파티션의 맨 뒤에 추가됩니다.
- 컨슈머는 offset 기준으로 메세지를 순서대로 읽습니다.
- 파티션에 저장되어 있는 메세지는 삭제되지 않고 설정에 따라 일정 시간이 지난 뒤 삭제됩니다.
프로듀서와 여러 파티션

- 프로듀서는 라운도 로빈 방식 또는 key로 파티션을 선택합니다.
- 같은 key를 갖는 메세지는 같은 파티션에 저장됩니다.
여러 파티션과 컨슈머

- 컨슈머는 컨슈머 그룹에 속합니다.
- 한 개의 파티션은 컨슈머 그룹의 한 개의 컨슈머만 연결이 가능합니다.
- 컨슈머 그룹에 속한 컨슈머들은 한 파티션을 공유할 수 없습니다.
- 한 컨슈머 그룹 기준으로 파티션의 메세지는 순서대로 처리됩니다.
- 브로커0의 topic1 - p0에 컨슈머 그룹 A에서 컨슈머1과 컨슈머2가 같이 연결이 될 수 없습니다.
- 파티션의 메세지가 순서대로 처리되는것을 보장할 수 있게 됩니다.
카프카의 성능이 좋은 이유
- 파티션 파일은 OS 페이지 캐시를 사용합니다.
- Zero Copy를 사용하여 전송 속도가 빠릅니다.
- 컨슈머 추적을 위해 브로커가 하는 일이 비교적으로 단순합니다.
- 메세지 필터, 메세지 재전송 등의 일은 브로커가 하지 않습니다.
- 묶어서 보내기, 묶어서 받기 (batch 처리)
- 프로듀서는 일정 크기만큼 메세지를 모아서 전송이 가능합니다.
- 컨슈머는 최소 크기만큼 메세지를 모아서 조회가 가능합니다.
확장성
- 확장이 쉽습니다.
- 1개 장비의 용량 한계 -> 브로커 추가, 파티션 추가
- 컨슈머가 느림 -> 컨슈머 추가, 파티션 추가
replication

- 레플리카란 파티션의 복제본을 말합니다.
- 복제된 수 만큼 파티션의 복제본이 각 브로커에 생깁니다.
- 리더와 팔로워로 구성
- 프로듀서와 컨슈머는 리더를 통해서만 메세지를 처리합니다.
- 팔로워는 리더로부터 복제되어 이중화가 되어 있습니다.
- 리더가 속한 브로커가 장애시 이중화 되어있던 팔로워가 리더가 됩니다
reference :
- 최범균님 - kafka 조금 아는척하기 1 (개발자용)
우왕 ...