JAVA/지식

ActiveMQ vs kafka vs RabbitMQ

우엥우아앙 2021. 2. 28. 14:17

메시지 큐란?

  • 메시지 지향 미들 웨어(MOM)는 비동기 메시지를 사용하는 다른 응용프로그램의 데이터 송수신
  • 메시지큐(MQ)는 프로그래밍에서 프로세스 또는 프로그램 인스턴스가 데이터를 서로 교환할 때 사용하는 방법
  • 이 때 데이터를 교환 시 시스템이 관리하는 메시지 큐를 이용하는 것이 특징
  • MOM은 MQ를 포괄하고 있고 MQ에는 Kafka, RabbitMQ, ActiveMQ 등

 

메시지 큐의 장점

  • 비동기(Asynchronous) : Queue에 넣기 때문에 나중에 처리 할 수 있다.
  • 비동조(Decoupling) : 애플리케이션과 분리 할 수 있다.
  • 탄력성(Resilience) : 일부가 실패 시 전체에 영향을 받지 않는다.
  • 과잉(Redundancy) : 실패 할 경우 재실행 가능
  • 보증(Guarantees) : 작업이 처리된 걸 확인 할 수 있다.
  • 확장성(Scalable) : 다수의 프로세스들이 큐에 메시지를 보낼 수 있다.

 

JMS va AMQP

  • AMQP는 ISO 응용 계층의 MOM 표준이다.
  • JMS는 MOM를 자바에서 지원하는 표준 API 이다.(JMS != AMQP)
  • JMS는 다른 자바 애플리케이션들끼리 통신이 가능하지만 다른 MOM의 통신은 불가능하다.(AMQP, SMTP 등)
  • ActiveMQ의 JMS 라이브러리를 사용한 자바 애플리케이션들 끼리 통신이 가능하다. 그러나 다른 자바 애플리케이션(ActiveMQ를 사용하지 않는)의 JMS와는 통신을 할 수 없다.
  • AMQP는 프로토콜로 다른 AMQP를 사용한 애플리케이션끼리 통신이 가능하다 같은 라인인 SMTP 하고도 가능하다.
  • JMS 라이브러리엔 AMQP를 지원하지 않는다.

 

Kafka va RabbitMQ vs ActiveMQ?

RabbitMQ , KafkaActiveMQ 는 모두 비동기 통신을 제공하고 프로세스를 분리하는 데 사용되는 메시징 기술입니다 (메시지의 발신자와 수신자 분리). 이를 메시지 대기열, 메시지 브로커 또는 메시징 도구라고합니다.

RabbitMQ, Kafka 및 ActiveMQ는 모두 동일한 기본 목적을 제공하지만 작업 방식이 다를 수 있습니다. Kafka는 처리량이 많은 분산 메시징 시스템입니다. RabbitMQ는 AMQP 기반의 신뢰할 수있는 메시지 브로커입니다. ActiveMQ와 Kafka는 모두 Apache 제품이며 둘 다 Java로 작성되었습니다. RabbitMQ는 Erlang으로 작성되었습니다.

  • (공통) 3가지 전부 비통기 통신을 제공하고, 보낸 사람과 받는 사람을 분리한다.
  • 하지만 업무에 따라서 다른 목적을 가지고 있다.
  • Kafka(Apache)는 처리량이 많은 분산 메시징 시스템
  • RabbitMQ, ActiveMQ(Apache)는 신뢰할 수 있는 메시지 브로커 이다.
    • 물론 Kafka도 신뢰할 수 있음. 상대적으로 두개가 아직은 더 신뢰성이 높다라는 뜻

 

  • RabbitMQ 는 바르고 쉽게 구성할 수 있으며 직관적이다.
    • AMQT 프로토콜을 구현해놓은 프로그램, 신뢰성, 유연한 라우팅, 관리 UI의 편의성
  • Kafka는 확장성, 고성능 및 높은 처리량
    • 대용량 실시간 로그 처리에 특화, 단순한 메시지 헤더를 지닌 TCP 기반의 프로토콜 사용으로 오버헤드 감소
    • 분산 시스템으로 인해 분산 및 복제 구성 장점
    • 그리하여 노드 장애에 대한 대응성을 가지고 있음
    • 프로듀서는 각 메시지를 배치로 broker에게 전달하여 TCP/IP 라운드 트립을 줄임
    • 기본저긍로 파일시스템에 저장을 통해 영속성(혹은 수명)을 보장 = 오류시 오류 지점부터 복구가 가능
    • Kafka, Kinesis(aws)는 window 단위의 데이터를 넣고 꺼낼 수 있다.
  • ActiveMQ 는 효율적이고 사용하기 쉬운 오픈 소스
    • 자바로 만든 오픈소스 메시지 브로커
    • 다양한 언어와 프로토콜을 지원(Java, C, C++, C#, Ruby, Perl, Python, 그리고 PHP 클라이언트)

 

참고 블로그

https://twowinsh87.github.io/etc/2018/08/07/etc-kafka-8/