Apache Kafka의 기본 아키텍쳐
- Producer : 메시지를 생산, Topic으로 전달
- Broker : kafka application이 설치되어 있는 서버 혹은 노드
- Consumer : Broker의 Topic으로부터 저장된 메시지를 전달받는 역할
- Zookeeper : 분산 애플리케이션 관리를 위한 코디네이션 시스템
기존 메시징 시스템과 차이점
배치 전송 처리
- Producer가 Broker에게 다수의 메시지를 전송하는 경우 batch형태로 Broker에게 한 번에 전달할 수 있음
- 메시지를 작은 단위로 묶어 batch 처리함으로 속도 향상
파일시스템에 메시지 저장
- 컨슈머가 메시지를 소비하더라도 별도의 설정을 하지 않아도 디스크에 메시지를 일정기간 보관하기 때문에 메시지 손실이 없음
- 메시지 처리중 문제가 발생하였거나 처리 로직이 변경된 경우 Consumer가 메시지를 처음부터 다시 rewind할 수 있음
메시지 전달 방식
- Consumer가 Broker로부터 직접 메시지를 가지고 가는 pull 방식
- 자신의 처리 능력만큼 메시지를 pull받아 최적의 성능
페이지 캐시
- 잔여 메모리를 이용하여 디스크 Read/Write를 하지 않고 페이지 캐시를 통해 처리속도가 빠름
Kafka 데이터 모델
Topic
- 메시지를 논리적으로 묶은 개념
Partition
- 토픽을 구성하는 데이터 저장소
* 파티션 수
여러개의 Producer에서 한 개의 파티션으로 메시지를 보낼 경우 병목이 생기고, 메시지의 순서를 보장할 수 없게 됨
-> 파티션을 여러개로 늘리고, 하나의 팡티션마다 하나의 프로듀서 메시지를 받는 경우 속도 향상됨
고려해야 할 점
- 각 파티션은 브로커의 디렉토리와 매핑되고, 저장되는 데이터마다 인덱스, 메시지가 있기 때문에 파일핸들러의 낭비가 생김
- Kafka는 리플리케이션을 지원하고, 이를 통해 리더 파티션을 팔로워 파티션으로 리플리케이션을 하는데 파티션이 너무 많을 경우 리플리케이션의 수행이 느려짐
- Kafka에서는 추후 파티션을 줄이는 것이 불가능하다.
Leader 파티션
> 프로듀서 또는 컨슈머와 직접 통신하여 읽기, 쓰기 연산을 담당함
Follower 파티션
> 리더 파티션으로 전달된 데이터를 복제 하여 보관하는 역할, 장애 발생 시 리더 파티션의 역할을 할 수 있음
Offset
- 파티션마다 메시지가 저장되는 위치
- 파티션 내 순차적으로 증가하는 숫자 형태
* 컨슈머는 메시지를 가져올 때 커밋하여 다음의 위치를 알 수 있음
'kafka' 카테고리의 다른 글
RabbitMQ vs Kafka (0) | 2022.08.27 |
---|---|
Kafka 등장 배경 (0) | 2022.08.20 |
댓글