오늘은 kafka와 RabbitMQ의 차이에 대해 알아보도록 하겠다.
kafka와 rabbitMQ를 이해하기 위해선 우선 메시지 큐에 대한 이해가 선제적으로 필요하다.
메시지 큐(MessageQueue : MQ)란?
프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할 때 사용하는 통신 방법. 더 큰 의미로는메시지 지향 미들웨어(MOM)를 구현한 시스템
을 의미한다.
MQ에 대한 동작원리를 그림으로 표현한다면 아래와 같다.
용어 정리
1. producer: 정보를 제공하는 자
2. consumer: 정보를 제공받아서 사용하려는 자
3. Queue:producer
의 데이터를 임시 저장 및consumer
에 제공하는 곳
우리가 주목해야 할 부분은 queue
이다.
MQ에서 메시지는 End-Point 간에 직접적으로 통신하지 않고 중간에 queue
를 통해 중개된다는 점이다.
메시지 흐름에 대해 다시 한번 정리하자면 아래와 같다.
메시지 흐름 순서
1. 메시지 전송
2.producer
는 해당 메시지를queue
에 추가
3. 해당 메시지는consumer
가 메시지를 검색하고 이를 사용하기 위한 작업 전까지 임시 저장
4.consumer
에 의해 호출
5. 해당 메시지는queue
에서 삭제
기존 방식을 떠나 위와 같은 흐름을 갖는 MQ의 장점은 아래와 같다.
MQ 장점
1. 비동기:queue
라는 임시 저장소가 있기 때문에 나중에 처리 가능
2. 낮은 결합도: 애플리케이션과 분리
3. 확장성:producer
orconsumer
서비스를 원하는대로 확장할 수 있음
4. 탄력성:consumer
서비스가 다운되더라도 애플리케이션이 중단되는 것은 아니며 메시지는 지속하여MQ
에 남아있다.
5. 보장성:MQ
에 들어간다면 결국 모든 메시지가consumer
서비스에게 전달된다는 보장을 제공한다.
kafka는 LinkedIn에서 개발된 메시지큐 방식 기반, 분산 메시징 시스템이다.
kafka의 기본 동작 원리를 그림을 통해 이해하자면 위와 같다고 볼 수 있다.
kafka는 pub-sub 모델 기반으로 크게 보자면 publisher(=producer)
, subscriber(=consumer)
, kafka cluster
로 구성된다.
위 그림을 참고하여 동작원리에 대해 간단히 정리한다면 아래와 같다.
kafka 동작원리
publisher
는 전달하고자 하는 메시지를topic
을 통해 카테고리화 한다.subscriber
는 원하는topic
을 구독(=subscribe)함으로써 메시지를 읽어온다.publisher
와subscriber
는 오로지topic
정보만 알 뿐, 서로에 대해 알지 못한다.kafka
는broker들
이 하나의클러스터
로 구성되어 동작하도록 설계클러스터
내,broker
에 대한 분산처리는ZooKeeper
가 담당한다.
간단히 기재한 위 내용에 대해 부가적인 용어 설명을 더 해보도록 하겠다.
먼저, topic
이라는 생소한 녀석에 대해 조금 더 들여다보도록 하자.
kafka에서 하나의 메시지는 topic
으로 분류된다.
그리고 하나의 topic
은 다수개의 partition
으로 나뉘어진다.
왜 하나의 topic을 여러개의 partition으로 분산시키는가?
병렬로 처리하기 위해 분산 저장한다.
다음으로 앞서 동작흐름으로 첨부된 이미지 상, 언급된 broker/zookeaper
에 대해 간단히 설명하자면 다음과 같다.
그렇다면 가장 중요한 kafka만의 차별점은 무엇일까?
kafka 차별점
1. 메시지를 파일 시스템에 저장함으로써 영속성 보장
2.subscriber(=consumer)
가broker
로부터 직접 메시지를 가지고 가는pull
방식으로 동작
3.publisher(=producer)
중심적인 형태로 많은 양의 데이터를 파티셔닝하는데 초점을 맞춘 시스템
4.subscriber
가 전달 상태를 기억한다.
5. 방대한 양의 데이터를 처리할 때, 사용
RabbitMQ는 AMQP 프로토콜을 구현한 메시지 브로커이다.
AMQP란?
Client와 Middleware broker간의 메시지를 주고받기 위한 프로토콜
RabbitMQ의 동작원리를 간단히 그림으로 보자면 다음과 같다.
publisher
: 메시지를 보내는 쪽consumer
: 메시지를 받는 쪽exchange
: publisher가 전달한 메시지를 queue에 전달하는 역할queue
: 메시지를 저장하는 버퍼여기서 눈썰미가 좋은 독자라면 약간의 차이를 느낄 것이다.
바로 queue로 들어가기 전, exchange라는 하나의 단계를 더 거친다는 점이다.
RabbitMQ에서 메시지는 곧바로 queue에 들어가지 않고 exchage에게 전달하면 exchange가 queue에 메시지를 넣는 역할을 수행한다.
이러한 방식으로 동작하는 RabbitMQ의 차별점은 무엇인지 간단히 정리해보자.
RabbitMQ의 차별점
1.Broker
중심적인 형태로publisher
와consumer
간의 보장되는 메시지 전달에 초점
2. 클러스터 구성이 쉽고Manage UI
가 제공되며플러그인
도 제공되어 확장성 뛰어남
3. 데이터 처리보단,관리적 측면
이나다양한 기능 구현을 위한 서비스
를 구축할 때 사용
앞선 내용들을 통해 각각의 정의 및 프로세스에 대해 면밀히(?) 살펴봤다.
위 내용을 통해서도 kafka와 RabbitMQ의 차이에 대해 어느정도 이해할 수 있겠지만 본 글의 주제가 주제인만큼 다시 한번 간단히 정리해보도록 하겠다.
kafka는 pub/sub
방식 / RabbitMQ는 메시지 브로커
방식
kafka의 pub/sub
방식은 생산자 중심적인 설계로 구성. 생성자가 원하는 각 메시지를 게시할 수 있도록 하는 메시지 배포 패턴으로 진행
RabbitMQ의메시지브로커
방식은 브로커 중심적인 설계로 구성. 지정된 수신인에게 메시지를 확인, 라우팅, 저장 및 배달하는 역할을 수행하며 보장되는 메시지 전달에 초점
전달된 메시지에 대한 휘발성
RabbitMQ는 queue
에 저장되어 있던 메시지에 대해 Event Consumer
가져가게 되면 queue
에서 해당 메시지를 삭제한다.
하지만, kafka는 생성자로부터 메시지가 들어오면 해당 메시지를 topic
으로 분류하고 이를 event streamer
에 저장한다. 그 후, 수신인이 특정 topic
에 대한 메시지를 가져가더라도 event streamer
는 해당 topic
을 계속 유지하기 때문에 특정 상황이 발생하더라도 재생이 가능하다.
방대한 양의 데이터를 처리할 때
, 장점이 부각된다.Manage UI를 제공하는 만큼 관리적인 측면이나, 다양한 기능 구현을 위한 서비스를 구축할 때
, 장점이 부각된다.오늘은 간단히 kafka와 RabbitMQ에 대한 이해 및 차이점에 대해 알아보았다.
상세하게 들어간다면 아직 들여다보지 못한 더 많은 부분이 존재하겠지만 이번 주제에 대해선 여기까지 다뤄보도록 하겠다.