메시지 큐를 사용하는 이유
메시지 큐(Message Queue) 는 분산 시스템에서 컴포넌트 간 데이터를 교환하기 위한 통신 방법이다. 메시지 큐는 비동기 커뮤니케이션을 지원하고 시스템 간 느슨한 결합(decoupling)을 제공한다. 이는 발신자와 수신자가 서로 의존하지 않고 각각의 컴포넌트의 개발 독립성과 확장성을 보장한다.
카프카 특징
- 높은 처리량과 낮은 지연 시간 : 카프카는 대용량 데이터를 실시간으로 처리 가능하도록 설계되어 높은 TPS와, 실시간 데이터 스트림, 로그 집계, 이벤트 드리븐 아키텍처에 적합하다.
- 메시지 내구성 : 기본적으로 카프카는 모든 메시지를 디스크에 영구 저장된다. Redis Pub/Sub 과 RabbitMQ 는 기본적으로 메시지가 유실되며 장애시 메시지가 유실될 수 있다. (RabbitMQ 는 디스크에 메시지를 영구 저장하는 옵션를 지원하지만 기본적으로 소비된다.)
- 분산 아키텍처 : 카프카는 여러 브로커 서버를 클러스터로 구성하여 높은 확장성(scalability) 과 내결함성(fault tolerance) 을 갖는다.
- Pull 기반 메시지 소비 : RabbitMQ 는 push 기반의 메시지 소비 방식으로 메시지를 처리하는 반면, 카프카는 메시지를 직접 가져오는 pull 기반의 메시지 소비 방식을 선택했다. 이로 인해 소비자는 자신의 서비스 처리 능력에 따라 메시지를 소비할 수 있는 장점이 있다.
카프카 구조
- 브로커(broker) : 카프카 클라이언트와 데이터 송수신하는 주체이다. 내결함성과 가용성을 위해 클러스터로 묶어 운영된다. (카프카 클라이언트: producer, consumer)
- 컨트롤러(controller) : 다른 브로커들의 상태를 체크하고 클러스터에 빠지는 경우 해당 브로커에 존재하는 리더 파티션을 재분배한다.
- 토픽(topic) : 데이터를 구분하기 위해 사용하는 단위이다. 토픽은 1개 이상의 파티션을 소유한다.
- 파티션(partition) : 프로듀서가 토픽으로 보낸 데이터가 저장되는 공간이다. 하나의 토픽에는 1개 이상의 파티션을 소유하고 있다. 할당된 파티션은 줄일 수 없다. 기본적으로 하나의 파티션은 단 하나의 컨슈머에게만 할당된다. (서로 다른 컨슈머 그룹이 동일한 파티션에서 데이터 읽기는 가능하다.)
- 레코드(record) : 파티션에 저장되는 데이터를 말한다. Timestamp, offset, Headers, Key, Value 등으로 구성된다.
- 프로듀서(producer) : 카프카에 필요한 데이터를 선언하고 브로커의 특정 토픽의 파티션에 전송한다. 프로듀서는 리더 파티션을 가지고 있는 카프카 브로커와 직접 통신한다.
- 컨슈머(consumer) : 적제된 데이터를 사용하기 위해 브로커로 부터 데이터를 가져와 필요한 처리를 하는 주체.
Reference
'message queue' 카테고리의 다른 글
Kafka CLI 명령어 살펴보기 (0) | 2024.12.04 |
---|---|
MessageQueue 의 장점과 RabbitMQ vs Kafka (0) | 2024.04.25 |