[RabbitMQ] RabbitMQ vs Kafka

2021. 11. 3. 11:21 Spring Cloud/RabbitMQ

이번 글에서는 대표적인 오픈소스 메세지 시스템인 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/

출처 : https://minholee93.tistory.com/entry/RabbitMQ-RabbitMQ-vs-Kafka