[RabbitMQ] RabbitMQ vs Kafka
- RabbitMQ
- 2020. 8. 27.
이번 글에서는 대표적인 오픈소스 메세지 시스템인 RabbitMQ와 Kafka를 비교해보겠습니다.
1. Message Retention
Kafka : by policy
Kafka의 메세지 보유기간은 policy에 기반합니다. 설정한 policy 기간 동안에는 메시지가 소멸되지 않습니다. 따라서 동일한 메세지를 반복적으로 처리할 수 있습니다.
RabbitMQ : by acknowledge
RabbitMQ의 메세지 보유기간은 acknowledge에 기반합니다. ack를 받은 메세지는 사라지게 됩니다. 따라서 처리를 완료한 메세지를 재 처리하고 싶을 경우에는 반드시 producer가 동일한 메세지를 re-publish 해야합니다.
2. Message Routing
Kafka : no routing mechanism
Kafka는 별도의 routing이 존재하지 않습니다. 따라서 publisher가 적절한 topic과 partition으로 메세지를 publish 해야합니다.
RabbitMQ : routing mechanism using exchange
RabbitMQ의 exchange는 direct/fanout/topic 등의 routing 기능을 제공합니다. 따라서 exchange가 routing key에 따라서 메세지를 적절한 Queue에 분배합니다.
3. Multiple Consumer
Kafka : topic-partition-one consumer per partition, guarnteed order
topic의 각 partition들에는 하나의 consumer만 메세지를 처리할 수 있습니다. 따라서 메세지 처리 순서가 보장됩니다.
RabbitMQ : multiple consumer per queue, not guranteed order
하나의 Queue에는 multiple consumer가 허용됩니다. 따라서 메세지의 처리 순서가 보장되지 않습니다.
4. Consumer Push/Pull Model
Kafka : consumer pull from Kafka topic
consumer가 Kafka에서 메세지를 pull합니다.
RabbitMQ : push message to consumer
RabbitMQ가 consumer한테 직접 메세지를 push합니다.
5. Which one?
어떤 메세지 시스템을 선택하는가는 전적으로 각 기업별 환경에 달려있습니다.. 🤨
다만, 대량의 transaction이 발생하거나 bigdata를 다루는 기업에서는 주로 Kafka를 사용한다고 합니다.
참고 자료 : https://www.udemy.com/course/rabbitmq-java-spring-boot-for-system-integration/
추천서적
파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
'RabbitMQ' 카테고리의 다른 글
[RabbitMQ] Jackson2JsonMessageConvertor (0) | 2020.08.27 |
---|---|
[RabbitMQ] RabbitMQ Structure 생성하기 (0) | 2020.08.27 |
[RabbitMQ] Retry Mechanism with Spring Boot (0) | 2020.08.22 |
[RabbitMQ] Dirty Queue with Schedule (0) | 2020.08.22 |
[RabbitMQ] Publisher API (0) | 2020.08.22 |