정의
- 오픈소스 분산 메시지 스트리밍 플랫폼
- Pub/Sub 모델을 지향하는 형태
Publisher / Subscriber 모델
- 중앙 집중형 메시지 관리 방식 : 메시지 생성/소비가 완전히 독립되어있는 구조 (비동기 처리)
- Publisher에서 메시징 플랫폼에 메시지를 발행(push)하면 Subscriber가 데이터를 수신(pull)
- 수신자가 정해져있지 않음 → 송신자가 ‘전송’ 하는게 아니라 수신자가 ‘Polling’ 하는 방식
Kafka 아키텍쳐 요소
- Zookeeper : 분산 코디네이팅 시스템, Kafka Borker 정보 및 Topic 메타정보를 보유함.
- Broker : 메시지 관리자, Kafka가 실질적으로 구동되는 서버단
- Producer : 메시지 생산자, 토픽의 Leader Partition을 보유한 Broker에 쓰기 연산 요청을 함.
- Consumer : 메시지 소비자, 호스팅하고있는 토픽의 Leader Partition을 보유한 Broker에 pull 방식의 읽기 연산 요청을 함.
타 메시징 시스템과의 차이점
- 페이지 캐싱 처리 : 읽고 쓰기 시 디스크가 아닌 잔여 메모리 내 페이지 캐시를 활용해 처리속도 향상
- 메모리가 아닌 디스크에 저장 : 보관 주기에 따라 디스크에 저장하여 메시지 손실 최소화
- 배치 전송 처리 : I/O들을 묶어서 배치 처리를 함으로써 처리속도 향상
Topic / Partition / Offset
- Topic : 메시지 그룹
- Partition : Topic에 속하는 메시지 단위 — 분산환경에서는 복제되어 여러 Broker에 저장 (Leader와 Follower로 역할 구분), but 읽고 쓰기 행위는 원본 Partition (Leader Partition)에서만 가능
- Offset : Consumer Group별 지금까지 읽은 메시지 위치, 동일 파티션 내 고유한 값 유지
저장 단위
- .log : 메시지 내용 저장
- .index : 메시지의 물리적 위치 및 Offset 저장 (log 파일에서 Offset을 찾기 위한 인덱스 파일)
- .timeindex : 메시지의 타임스탬프 저장

참고문서