Kafka
분산 스트리밍 플랫폼으로, 주로 실시간 데이터 피드의 빅 데이터 처리를 목적으로 사용
Kafka는 메시지 큐와 유사하지만, 대용량 데이터 스트림을 저장하고 실시간으로 분석하거나 처리하는데 중점을 둔다.
장점
1. 신뢰성 : 데이터복제, 확인 메커니즘
2. 유연성 : 다양한 소비자 패턴, 프로토콜 지원
3. 확장성 : 분산 시스템, 수평확장
4. 성능 : 높은 처리량, 저지연
5. 관리 및 모니터링 : 관리 도구, 플로그인 시스템
단점
1. 설정 및 운영 복잡성 : 복잡한 설정, 운영 관리
2. 성능문제 : 브로커 오버헤드, 대규모 메시지 처리
3. 운영비용 : 리소스 소비, 모니터링 및 유지보수
4. 러닝커브 : 학습 필요성
기본구성요소
메시지
데이터 단위 로그데이터나 이벤트 데이터가 메시지가 될수있다.
메시지는 키,값,타임스탬프, 그리고 몇가지 메타데이터로 구성
프로듀서
메시지를 생성하고 kafka로 보내는 역할을 합니다. 웹 애플리케이션이 로그데이터를 Kafka에 보내는 경우 프로듀서가 됩니다.
프로듀서는 특정 토픽에 메시지를 보냅니다.
토픽
메시지를 저장하는 장소 메시지는 토픽에 저장되어있다가 소비자에게 전달
토픽은 여러 파티션으로 나뉠수있으며, 파티션은 메시지를 순서대로 저장합니다. 파티션을 통해 병렬 처리가 가능
파티션
토픽을 물리적으로 나눈 단위, 각 파티션은 독립적으로 메시지를 저장하고 관리
각 파티션은 메시지를 순서대로 저장, 파티션 내의 메시지는 고유한 오프셋으로 식별
키
메시지를 특정 파티션에 할당하는데 사용되는값
동일한 키는 가진 메시지는 항상 동일한 파티션에 저장
특정 사용자 ID를 키로 사용하여 해당 사용자의 모든 이벤트가 동일한 파티션에 저장되도록 할수있다.
컨슈머
토픽에서 메시지를 가져와 처리하는 역할을 합니다.
특정 컨슈머 그룹에 속하며, 같은 그룹에 속한 컨슈머들은 토픽의 파티션을 분산 처리합니다.
기본적으로 컨슈머는 스티키 파티셔닝 사용, 이는 특정 컨슈머가 특정 파티션에 붙어서 계속해서 데이터를 처리하는 방식으로, 이는 데이터 지역성을 높여 캐시 히트율을 증가시키고 전반적인 처리 성능을 향상 시킵니다.
(RabbitMQ에서는 라운드로빈방식)
브로커
kafka클러스터의 각 서버를 의미, 메시지를 저장하고 전송하는 역할
하나의 Kafka클러스터는 여러브로커로 구성될수있으며, 각 브로커는 하나 이상으 ㅣ토픽 파티션을 관리합니다.
주키퍼
-
Kafka와 RabbitMQ의 차이점
설계철학
메시지모델
RabbitMQ는 큐를 중심으로 메시지를 전달, 메시지는 큐에 저장되고, 큐에서 하나 이상의 컨슈머에게 전달됩니다.
Kafka는 토픽을 중심으로 메시지를 저장합니다. 메시지는 토픽의 파티션에 저장되고, 컨슈머는 이 파티션에서 메시지를 읽습니다.
메시지 지속성
RabbitMQ는 메시지를 메모리나 디스크에 저장할수있으며, 일반적으로 단기저장을 목표로합니다.
Kafka는 메시지를 디스크에 저장하며, 장기 저장을 목표로 합니다. 데이터 로그는 설정된 기간 동안 보존됩니다.
사용
RabbitMQ는 작업큐, 요청/응답패턴, 비동기 작업 처리 등 전통적인 메시지 큐 사용 사례에 적합
Kafka는 실시간 데이터 스트리밍, 로그 수집 및 분석, 이벤트 소싱 등 대규모 데이터 스트림 처리에 적합합니다.