대규모 시스템

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

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의 지연시간이 짧음에도 성능 차이가 남