린예라 2024. 5. 6. 21:25

카프카와 래빗엠큐에 대해 알아보자. 우선 둘의 공통점은

 

메시지 브로커 (Message Brocker)이며,

프로세스간의 혹은 프로그램간의 통신 방법중의 하나인 메시지 큐를 사용한다는 것이다.(Kafka의 경우 이런 메시지 큐를 여러개 가지고 있는 느낌)

 

메시지 브로커란 통신하는 두 개의 대상사이에서 주고받는 메시지를 잘 주고 받을 수 있게 중계해주는 역할을 한다.

 

그리고 이 역할을 수행하기 위해 메시지 큐 방식을 사용한다.

메시지 큐는 통신하는 생산자(Producer)와 소비자(Consumer)사이에 임시 저장소 역할(혹은 캐시)을 하는 것이다. 그러면 소비자가 필요할 때 메시지큐에서 필요한 자원을 가져가는 방식의 시스템이다.

이는 RabbitMQ의 모델과 비슷하기도 하다.

비동기방식이기도 하다.

 

그러면 각각 카프카와 래빗엠큐에 대해 자세히 알아보자.

 

1. RabbitMQ (래빗엠큐)

RabbitMQ는 Message Brocker의 구현체이다. 이 Message Brocker는 앱이나 시스템 및 서비스가 서로간에 통신하고 정보를 교환할 수 있도록 해주는 소프트웨어이다.

 

즉 통신하려고 하는 두 대상의 사이에서 중개역(Brocker) 역할을 해준다고 할 수 있다.

 

역할은 메시지를 검증, 저장, 라우팅 하고 이를 적절한 대상에게 전달한다.

송수신자의 각각의 상태나 위치등을 신경 쓰지않고 전달이 가능하다.

 

RabbitMQ는 여기에 더해 다양한 메시징패턴과 프로토콜, 복잡한 라우팅까지 지원한다.

메시지를 빠르게 발행하고 삭제하는 데 초점을 맞추며, 메시지가 의도한 소비자에게 도착하는지  모니터링까지 한다.

즉 신속 정확하게 메시지를 발행하고 배달한다. 배달된게 확인이 되었으면 메시지 큐에서 해당 메시지를 삭제한다.

 

RabbitMQ는 다양한 메시징패턴과 다양한 언어를 지원하며 그에 맞는 풍부한 라이브러리들을 지원한다.

처리량이 낮을 때(chatGPT에 의하면 초당 4000~10000개의 메시지)의 낮은 지연시간으로 범용적인 상황에서 사용할 만 하다.

 

 

2.Kafka

Kafka도 메시지 브로커이지만 대용량의 실시간 데이터 스트림을 처리하는 데 초점을 맞춘 분산 이벤트 스트리밍 플랫폼이다.

 

출처: https://www.confluent.io/blog/event-streaming-platform-1/

 

Kafka의 내부,  현재 T0 토픽은 4개의 파티션, T1토픽은 2개의 파티션으로 구성되어 있다.

그림에서 Kafka라고 되어있는 부분을 보면 위의 RabbitMQ의 구조처럼, 중간에서 Kafka가 메시지 브로커의 역할을 하고 있는 것을 알 수 있다.

 

Kafka는 내부가 토픽(논리적개념)과 파티션(실제저장하는단위)형식의 구조로 되어있는데, 메시지를 파일시스템에 저장하고, 순차적인 디스크의 입출력 방식을 통해 성능을 향상하고, 1초에 수백만개의 메시지처리가 가능하다.

 

하지만 메시지가 전달 된 후에도, 일정 기간이 되기 전 까지 메시지가 삭제되지 않기 때문에, 중복사용 될 수 있고, 순서 또한 보장되지 않는다.(단 하나의 파티션 내에서는 메시지 순서가 보장된다)

 

Kafka는 위에서 본 메시지 큐를 여러개를 병렬로 가지고 있다고 생각하면 편하다.

 

또한 우선순위가 없어 모든 메시지들을 동등하게 취급한다.

 

즉 카프카는 대규모 데이터(1초당 수백만건)의 실시간 처리가 필요하거나, 메시지들을 일회용이 아닌 여러번 사용해야 하는 경우에 사용할 수 있다.