카프카는 분산형 이벤트 스트리밍 플랫폼 입니다. 핵심 개념 중 하나는 파티션으로, 토픽을 여러 파티션으로 나누어 메시지 병렬 처리를 가능하게 합니다. 또한 클러스터 내 부하를 효율적으로 분산시킵니다. 카프카는 높은 throughput과 낮은 latency를 제공하며, scalability와 durability 가 높은 분산 시스템에 가장 적합한 이벤트 스트리밍 플랫폼입니다.
kafka
producer
kafka 로 메세지를 보내는 역할을 하는 클라이언트
consumer
kafka 에서 메세지를 꺼내가는 역할을 하는 클라이언트
ex) fastAPI 애플리케이션
topic
데이터를 구분하는 카테고리 또는 채널
ex) 프로듀서가 데이터를 보낼 때 토픽에 데이터를 게시함. 컨슈머는 관심 있는 토픽의 데이터를 읽음
partition
토픽을 나누는 논리적 단위. 토픽은 여러 파티션으로 나뉨
나뉜 파티션 수만큼 컨슈머를 연결할 수 있음
파티션은 토픽을 병렬로 처리할 수 있게 해주며, 클러스터의 부하를 분산시킴
ex) 토픽이 3개의 파티션으로 구성되면, 각 파티션에 프로듀서가 데이터를 순차적으로 기록함. 컨슈머는 각 파티션의 데이터를 병렬로 처리할 수 있음
offset
각 파티션에 저장된 메시지는 고유한 오프셋을 부여받음
오프셋은 파티션 단위로 관리되며, 다른 파티션의 오프셋과는 무관함
ex) 파티션 0의 첫 번째 메시지는 오프셋 0, 두 번째 메시지는 오프셋 1, 세 번째 메시지는 오프셋 2
broker
kafka 애플리케이션이 설치된 노드
kafka 클러스터에 속함
cluster
여러 kafka broker 의 집합
kafka 는 일반적으로 다수의 브로커로 구성된 클러스터에서 실행됨
kafka 의 주요 특징
High Throughput, Low Latency
분산 시스템에서의 상황을 가정하기 위해 Kafka와 유사하게 복제 동작하는 RabbitMQ의 미러링 사용
RabbitMQ (미러링 적용)
RabbitMQ는 미러링으로 데이터를 여러 노드에 복제함
Throughput : 약 38 MB/s로, 가장 낮은 처리량
Latency : 전체적으로 가장 낮은 지연 시간을 기록하며, p99.9에서도 약 1 ms 내외로 매우 짧은 지연 시간을 유지함
Kafka
Throughput : 약 600 MB/s로 가장 높은 처리량
Latency : 지연 시간이 낮고, p99.9에서도 약 10 ms 이하를 유지함
처리량과 응답 속도를 함께 비교했을 때 Kafka 가 독보적임
Kafka는 분산 시스템을 위해 설계되어 더 높은 처리량과 복제 효율성을 제공함
RabbitMQ는 기본적인 메시지 브로커로서 설계되어 미러링을 사용 시 성능 저하가 발생함
scalability
kafka 는 쉽게 확장 가능하도록 설계됨
브로커를 쉽게 추가하거나 (scale out) 쉽게 제거할 수 있음 (scale in)
kafka-reassign-partitions.sh : 전체 브로커에 토픽의 파티션을 고르게 부하 분산하기 위해, 모든 브로커에 균등하게 파티션을 재분배할 수 있음
Durability
로그 파일 디스크 I/O
kafka 에서는 각 파티션에 대해 별도의 로그 파일을 생성하고, 그 안에 메시지를 저장함
모든 메시지는 순차적으로 로그 파일에 기록됨
replication
각 파티션은 리더 브로커와 팔로워 브로커를 가짐
리더 브로커가 데이터를 받아들이면, 해당 데이터는 팔로워 브로커로 복제됨
➡️ 데이터의 복제본이 여러 브로커에 저장되어 장애 시 데이터 손실을 방지