RabbitMq와 Kakfa 모두 메세지 큐를 이용해 시스템의 부하를 줄이고 성능을 높이기 위한 용도로 사용
메세지 큐를 사용한다, rabbitMQ는 exchange영역에서 pub/sub 방식을 사용, kafka는 pub/sub방식을 사용한다는 점에서 같기도 하다.
RabbitMQ is the most widely deployed open source message broker.
(메세지 브로커라는 큰 틀 안에 메세지큐가 있는것이다.)
Message Broker(메시지 브로커)는 Publisher(송신자)로부터 전달받은 메시지를 Subscriber(수신자)로 전달해주는 중간 역할이며 응용 소프트웨어 간에 메시지를 교환할 수 있게 한다.
이 때 메시지가 적재되는 공간을 Message Queue(메세지 큐)라고 하며 메시지의 그룹을 Topic(토픽)이라고 한다.
메시지 브로커는 메시지 큐에서 더 확장된 기능을 가지고 있다고 봅니다. 더 광범위한 전송, 메시지 내용을 통한 라우팅 및 추가/고급 기능 등을 지원하고, 구현체 별로 어떤 방식을 통해 메시지를 전달하고, 내부 구조를 어떻게 구현했는가에 따라 동작하는 방식, 목적, 성능이 달라집니다.
Event Producer가 메세지를 생성하면,
메세지 브로커인 RabbitMQ내에서 이 메세지를 어떤 큐에 발송할지 결정하는 exchange를 하게 되고,
이렇게 큐에 들어간 메세지는 Event Consumer가 가져가게 됩니다.
따라서 컨슈머가 메시지를 가져가면 큐에는 더 이상 남지 않고 사라지게 됩니다.
이 때 메시지 "큐"의 특성에 따라 "선입선출"이 적용되어 메시지는 순서대로 컨슈머에게 제공되고, 컨슈머는 미리 정해둔 한계점까지 지속적으로 메시지를 큐에서 읽어들입니다.
(주의사항 : 메세지 소비자가 하나라면, 메시지 순서를 보장한다. 그러나 메시지를 읽는 여러 소비자가 있으면 메시지 처리 순서에 대해 보장할 수 없다.)
RabbitMQ
는 queue
에 저장되어 있던 메시지에 대해 Event Consumer
가져가게 되면 queue에서 해당 메시지를 삭제한다.
하지만, kafka
는 생성자로부터 메시지가 들어오면 해당 메시지를 topic
으로 분류하고 이를 event streamer
에 저장한다. 그 후, 수신인이 특정 topic
에 대한 메시지를 가져가더라도 event streamer
는 해당 topic
을 계속 유지하기 때문에 특정 상황이 발생하더라도 재생이 가능하다.
Pub-sub에서, 모든 구독자(subscriber)는 발행자(publisher)가 exchange에 전송하는 메세지 복사본을 1개 이상 가지기 때문이다.
kafka는 클러스터를 통해 병렬처리가 주요 차별점인 만큼 방대한 양의 데이터를 처리할 때, 장점이 부각된다.
RabbitMQ는 데이터 처리보단 Manage UI를 제공하는 만큼 관리적인 측면이나, 다양한 기능 구현을 위한 서비스를 구축할 때, 장점이 부각된다.
Message queue는 MSA에서 많이 사용됩니다.
클라우드 기반 또는 서버리스 애플리케이션을 개발할 때 부하에 따라 앱을 scale 할 수 있습니다.
엄격한 메시지 순서관리가 가능하고,
Kafka의 메시지 보존은 메시지 로거 또는 거대하고 빠른 데이터 스트리밍 서버에 적합하기 때문에 사용
메시지 전송 타이밍 제어(메시지 만료 또는 메시지 지연 제어)가 가능하고
소비자의 확인 메시지가 보장되기때문에
사용한다.