보라코딩
RabbitMQ와 Kafka 본문
- RabbitMQ(Message Broker) : exactly once delivery가 기본 정책으로 4번의 핸드 쉐이크로 성능 떨어지는 편(변경가능하나 성능 떨어지지). 소비 개념!!
- KafKa(Event Broker) : at most once delivery가 기본정책으로 중복 발생하나 처리량이 높아! 소비가 아니라 토픽 저장소!
(위에꼬 강의내용이라 정확)
- 래빗엠큐는 ack 3번 날아가고 at least once랑 at most once 두개만 존재함
- 카프카는 consume과 producer의 각각의 delivery 정책(semantic)이 존재하는데
디폴트가 at most once임
- 카프카 스트림즈는 exactly once가 존재하는데 카프카는 없어서 우리는
at least once로 중복을 허용하게 하고 받는 consume에서 db를 사용해서 받은 메세지인지 확실하게 체크할 예정
- 카프카도 래빗엠큐도 모두 ack 는 존재함(다만 래빗엠큐는 3way handshake이고 카프카는 ack 보내놓고 돌아오진 않아..?디폴트가)
- 그러나 우리가 하고 있는 서비스는 멱등성이 보장될 것이라 생각해서 저렇게 안해도 될 것 같기도 하나 아직 모름
- 브로커(서버)는 3개지만 클러스터로 구성되어 실제로 하나만 작동하고 publish는 하나만 뜨기 때문에 멱등성 보장될 것이라 생각
래빗MQ와 카프카는 모두 메시지 브로커 시스템으로서, 대규모 데이터 스트림을 처리하는 데 특화된 도구입니다. 하지만 각각의 특성과 용도에는 몇 가지 중요한 차이점이 있습니다.
1. 데이터 처리 방식
- 래빗MQ (RabbitMQ):
- 메시지 큐 방식을 사용하여 데이터를 처리합니다.
- 메시지를 큐에 저장하고, 소비자가 메시지를 가져와 처리하는 방식입니다.
- 카프카 (Kafka):
- 로그 스트리밍 플랫폼으로, 대용량 데이터를 실시간으로 처리합니다.
- 데이터를 토픽 단위로 구성하며, 이벤트 스트림을 처리하는 데 중점을 둡니다.
- 분산 아키텍처를 기반으로 하여, 고성능과 확장성이 뛰어납니다.
2. 용도와 적합성
- 래빗MQ:
- 전통적인 메시지 큐 시스템으로, 메시지의 신뢰성과 지연 시간을 중시하는 경우에 적합합니다.
- 단일 메시지 처리에 강점이 있으며, 정형화된 큐 처리 시나리오에 유리합니다.
- 카프카:
- 대규모 실시간 데이터 스트리밍을 다루는 데 적합합니다.
- 대량의 이벤트 데이터를 처리하고, 데이터 파이프라인을 구축하거나 실시간 분석에 사용됩니다.
- 데이터 유실 가능성을 감수하고, 높은 처리량과 낮은 지연 시간이 필요한 경우 유리합니다.
3. 확장성과 성능
- 래빗MQ:
- 단일 브로커 모델에서 시작하여 클러스터링을 통해 확장할 수 있지만, 일반적으로 카프카보다는 규모가 작습니다.
- 메시지 처리 속도와 지연 시간에서는 카프카보다는 떨어질 수 있습니다.
- 카프카:
- 분산 아키텍처로 설계되어 있어, 수평 확장성이 뛰어납니다.
- 고성능의 메시지 전달과 높은 처리량을 지원하며, 수천 대의 브로커를 운영할 수 있습니다.
4. 전달 보증
- 전달 보증:
래빗MQ는 기본적으로'exactly once'delivery를 지원합니다.(알아보니 없대) 이는 메시지가 정확히 한 번만 처리됨을 보장합니다. 메시지가 소비자에 의해 처리되었음을 확인하기 위해 핸드셰이크를 사용합니다. - 성능 영향: 래빗MQ는 이러한 정확성을 보장하기 위해 추가적인 핸드셰이크와 처리 과정을 거치므로 성능에 약간의 영향을 줄 수 있습니다. 메시지 처리 속도보다는 데이터의 정확성과 무결성을 중시하는 특성이 있습니다.
카프카 (Event Broker)
- 전달 보증: 카프카는 기본적으로 'at most once' delivery를 기본 정책으로 사용합니다. 이는 메시지가 최대 한 번 처리될 것을 보장하지만, 중복 발생할 수 있습니다.
- 성능 영향: 'at most once'는 중복 메시지를 피하기 위해 메시지가 전송되지 않을 수 있으며, 이는 높은 처리량을 달성하는 데 기여합니다. 따라서 처리 속도와 처리량에 초점을 맞춘 설계입니다.
요약
- 래빗MQ: 메시지의 정확성과 무결성을 중시하는 소비자-큐 모델로, 'exactly once' delivery를 통해 메시지 전달의 정확성을 보장하나 이로 인해 성능에 약간의 저하가 발생할 수 있습니다.
- 카프카: 높은 처리량을 목표로 하는 이벤트-토픽 저장소로, 'at most once' delivery를 기본으로 하며 중복 발생을 감수하면서도 높은 처리량을 유지합니다.
결론
래빗MQ는 전통적인 메시지 큐 시스템으로 신뢰성 있는 메시지 전달과 다양한 메시징 패턴을 지원하며, 카프카는 대규모 실시간 데이터 스트리밍 처리에 특화된 플랫폼입니다. 선택은 데이터 처리의 용도와 요구 사항에 따라 달라질 것입니다.