대규모 시스템
- 방대한 양의 데이터를 처리하고 수 많은 요청을 동시에 처리할 수 있는 시스템
- 메시징 시스템을 활용하여 각 서비스간의 효율적인 데이터 통신과 확장성 보장
Kafka

- 분산 스트리밍 플랫폼, 실시간 데이터 피드의 빅 데이터 처리를 목적으로 사용
- 메시지 큐와 유사하지만 대용량 데이터 스트림을 저장하고 실시간으로 분석하거나 처리하는데 중점
구성 요소
message
- Kafka를 통해 전달되는 데이터 단위
- key, value, timestamp, metadata로 구성
producer
- 메시지를 생성하고 kafka에 전달하는 역할
- 특정 토픽에 메시지 전달
topic
- 메시지를 저장하는 장소
- 여러 파티션으로 나눠지며 파티션은 메시지를 순서대로 저장
partition
- 토픽을 물리적으로 나눈 단위
key
- 메시지를 특정 파티션에 할당하는 데 사용되는 값
consumer
- 토픽에서 메시지를 가져와 처리하는 역할
- 특정 컨슈머 그룹에 속하며 토픽의 파티션을 분산 처리
broker
- kafka 클러스터의 각 서버 의미
- 메시지를 저장하고 전송하는 역할
zookeeper
- kafka 클러스터를 관리하고 조정하는 데 사용되는 분산 코디네이션 서비스
- 브로커의 메타데이터를 저장하고 브로커간의 상호작용 조정
Kafka와 RabbitMQ 차이
RabbitMQ
- producer가 메시지를 보내고 consumer에 의도한대로 도착했는지 모니터링
- 복잡한 메시지 라우팅을 위해 설계
- 메시지 큐 기반 설계
- 메시지 전달의 우선순위를 지정하는 범용 메시지 브로커
- 초당 수천개 메시지 처리, 지연시간 짧음
Kafka
- producer는 consumer가 메세지를 검색했는지 여부와 상관없이 queue에 저장
- 더 복잡한 아키텍쳐를 사용하고 처리량이 높은 스트림 이벤트 관리
- 파티션 기반 설계
- 우선순위 대기열 지원 X, 토픽과 파티션을 사용하여 메세지 처리, 파티션 내부 순서 보장
- 메시지를 로그 파일에 추가해 보존기간이 만료될때까지 보관
- 초당 수백만개 메시지 처리, 대용량 데이터 처리
RabbitMQ는 데이터를 하나하나씩 가져오는구조이고 Kafka는 한번에 처리할 수 있는 데이터의 양이 많아서 RabbitMQ의 지연시간이 짧음에도 성능 차이가 남