메시지 플랫폼은 다양한 시스템 간의 메시지를 전달하고 처리하는 데 중요한 역할을 합니다. Redis, RabbitMQ, Kafka는 가장 많이 사용되는 메시지 브로커 및 이벤트 브로커 중 하나로, 각기 다른 특성과 장점을 가지고 있습니다.
메시지 브로커는 대규모 메시지 기반 미들웨어 아키텍처에서 사용됩니다. 주된 특징은 메시지를 받아서 적절히 처리한 후 짧은 시간 내에 메시지가 삭제된다는 점입니다.
이벤트 브로커는 메시지나 이벤트를 하나만 보관하고 인덱스를 통해 개별 액세스를 관리합니다. 주요 특징은 메시지가 삭제되지 않고, 저장된 이벤트를 통해 장애가 발생했을 때 재처리가 가능하며, 많은 양의 실시간 스트림 데이터를 효과적으로 처리할 수 있다는 점입니다.
Redis와 RabbitMQ는 메시지 브로커에 속하고, Kafka는 이벤트 브로커에 속합니다.
Redis는 인메모리 데이터 구조 서버로서, Pub/Sub 메시지 브로커 기능을 제공합니다.
RabbitMQ는 오픈 소스 메시지 브로커로, 메시지 큐잉과 Pub/Sub을 모두 지원합니다.
Kafka는 Pub/Sub 시스템 모델과 MQ를 혼합해서 사용하는 이벤트 브로커입니다.
Kafka가 다른 메시징 시스템과 차별화 되는 점은 메시지 큐가 영속성을 갖는다는점이다. 전송된 데이터는 설정된 기간이나 크기 제한에 도달하기 전까지는 저장된다. 따라서 한번 소비 되어도 설정한 제한을 초과하지 않는 이상은 메시지가 사라지지 않는다. 여러 번 소비되거나 재처리될 수 있으며 이는 설정으로 조정가능하다.
RabbitMQ 에서 메시지는 수신하는 application 이 연결되거나 queue에서 메시지를 수신할때까지 저장된다. client는 메시지를 수신하거나 메시지 처리를 끝내면 메시지를 ack(acknowledge - 확인) 처리할 수 있다. 앞에서 말한 두 경우 모두 메시지가 ack 처리되면 queue에서 사라진다.
특성/메시지 시스템 | Redis | RabbitMQ | Kafka |
---|---|---|---|
역할 | 메시지 브로커 | 메시지 브로커 | 이벤트 브로커 |
특징 | 메모리 기반, 빠른 처리 속도 | 쉬운 구성, 복잡한 라우팅 지원 | 비동기식 Pub/Sub, 분산 처리, 생산자 중심 설계 |
적합한 상황 | 지속성이 필요 없는 단기 메시지, 빠른 서비스 | 복잡한 라우팅 필요, 높은 신뢰성 요구 | 대규모 트래픽, 확장성 요구 |
각 메시지 플랫폼의 고유한 특성과 사용 사례를 이해하고, 특정 요구사항에 맞춰 적절한 선택을 하는 것이 중요합니다. Redis는 빠르고 간단한 메시지 처리가 필요할 때, RabbitMQ는 복잡한 라우팅과 높은 신뢰성이 요구될 때, Kafka는 대규모 데이터 처리와 확장이 필요한 경우에 적합합니다.
Kafka가 RabbitMQ에 비해서 메시지 전송이 실패했을 때에 대한 대비책이 더 잘되어 있다
카프카는 높은 처리량과 낮은 지연 시간을 제공하여 실시간 데이터 처리를 가능
RabbitMQ는 메시지의 손실을 최소화하고, 메시지가 정확하게 전달되도록 보장