Kafka는 분산 로그를 기반으로 디스크에 보존된 로그의 끝에 메세지가 기록되고 클라이언트가 해당 로그에서 읽기 시작하는 위치를 선택할 수 있다.
Kafka 클러스터에도 여러 서버에 분산 및 클러스팅하여 가용성을 높일 수 있으며, 개발자 중심의 설계로 구성되어 비동기식이고 고성능 방식이다.
분산 처리 가능한 점으로 하나의 서버/노드에서 장애가 발생하면 다른 서버/노드에서 대신 처리 가능하다.
TCP 기반의 프로토콜을 사용하여 오버헤드가 감소한다.
카프카는 pub/sub 모델로 만들어졌으며, pub/sub 모델이란 중앙에 메세지 시스템 서버를 두고, 메세지를 보내고( publish ), 받는( subscribe ) 형태의 통신 구독을 신청한 수신자만 메세지를 전달받을 수 있는 구조이다.
두 기술 다 메세지 브로커라는 응용프로그램으로 서비스 및 시스템이 정보를 통신하고 교환 할 수 있도록 하는 소프트웨어이다.
메세지 브로커는 지정된 수신인에게 메세지를 확인, 라우팅, 저장 및 배달한다.
Kafka는 고성능을 추구하기 때문에 비교적 무겁다고 한다. 따라서 대용량 데이터를 다루지 않는다면 가벼운 RabbitMq가 적절하다.
현재는 Kafka의 사용 사례들이 늘고 있는 추세이고, 개발자들이 스트리밍 데이터를 더 쉽게 처리할 수 있도록 해주는 클라이언트 라이브러리, Kafka Strames가 있다.
kafka는 복잡한 라우팅에 의존하지 않고 최대 처리량으로 스트리밍( 실시간 처리 )하는 데 가장 적합하여 스트리밍 데이터를 저장, 읽기, 분석하는 프레임워크가 필요한 경우, 정기적으로 감사하는 시스템이나 메세지를 영구적으로 저장하는 데 이상적이다.
RabbitMq는 신속한 요청 - 응답이 필요한 웹서버에 적절하며, 장시간 실행되는 테스크, 안정적인 백그라운드 작업 실행, 애플리케이션 간의 내부 통신이 필요할 때 사용하는 것이 이상적이다.