💡 AMQP(Advanced Message Queuing Protocol): 메세지 지향 미들웨어를 위한 개방형 표준 응용 계층 프로토콜
RabbitMQ | Kafka | Redis Pub/Sub | |
---|---|---|---|
이벤트 저장 in Queue | 메세지가 성공적으로 전달되었다고 판단될 경우 메세지가 큐에서 삭제되기 때문에 재처리가 어렵다 | 이벤트를 삭제하지 않고 스트림에 저장함으로 영속성(durability)이 보장되고, 재처리가 가능하다. | 저장하지 않음. 심지어 channel에 이벤트가 도착했을 때 해당 채널의 subscriber가 존재하지 않으면 이벤트 사라짐 |
프로토콜 | AMQP, MQTT, STOMP 등 여러 메세징 플랫폼을 지원한다. | 단순한 메시지 헤더를 지닌TCP 기반 custom 프로토콜을 사용하기 때문에 대체가 어렵다. | RESP (Redis Serialization Protocol) - TCP 통신 |
라우팅 | Direct, Fanout, Topic, Headers의 라우팅 옵션을 제공하여 유연한 라우팅이 가능하다. | 기본기능으로 라우팅에 대해서 지원하지 않는다. Kafka Streams를 활용하여 동적라우팅을 구현할 수 있다. | - |
우선순위 | priority queue를 지원하여 우선 순위에 따라서 처리가 가능하다. | 변경 불가능한 시퀀스 큐로, 한 파티션 내에서는 시간 순서를 보장한다. 하지만 여러 파티션이 병렬로 처리할 때는 시간 순서 보장 못함 | 우선순위 처리는 커녕 이벤트가 도착할 지 보장도 못함 |
장점 | - 오래전에 개발되어 제품 성숙도가 크다 - 필요에 따라 동기/비동기식 가능 - 유연한 라우팅 - producer/consumer간의 보장되는 메세지 전달 - Manage UI 기본 제공 - 데이터 처리보단 관리적 측면이나 다양한 기능 구현을 원할 때 사용 | - 이벤트가 전달되어도 삭제하지 않고 스트림에 저장 - 고성능, 고가용성, 분산처리에 효과적 - producer 중심적 (많은 양의 데이터를 병렬 처리) | - channel을 구독하는 모든 subscriber가 이벤트를 받기 때문에 synchronization 문제에서 kafka보다 덜하다 - 미들웨어가 필요 없어서 가볍다 |
단점 | - Kafka 보다 느림 | - 범용 메세징 시스템에서 제공되는 다양한 기능이 제공되지 않음 | - 이벤트 도착 보장을 못함 |
참고
https://junkwon-dev.github.io/graphql/real-time/architecture/reids-graphql-pubsub/
https://blog.dudaji.com/general/2020/05/25/rabbitmq.html
https://medium.com/@umanking/카프카에-대해서-이야기-하기전에-먼저-data에-대해서-이야기해보자-d2e3ca2f3c2
https://velog.io/@_koiil/Kafka-vs.-RabbitMQ-for-Event-Sourcing
https://always-kimkim.tistory.com/entry/kafka101-streams
https://velog.io/@_koiil/Kafka-vs.-RabbitMQ-for-Event-Sourcing
Kafka의 단점에 Kafka보다 느림이라고 적혀있습니다.
혹시 원래 작성하고 싶으셨던 내용이 뭔지 알 수 있을까요?