본문 바로가기

대규모 시스템

Kafka란?

Kafka란?

  • Kafka는 분산 스트리밍 플랫폼으로, 주로 실시간 데이터 피드의 빅 데이터 처리를 목적으로 사용됩니다.
  • Kafka는 메시지 큐와 유사하지만, 대용량 데이터 스트림을 저장하고 실시간으로 분석하거나 처리하는 데 중점을 둡니다.

Kafka의 역할

  • 실시간 데이터 처리: 대용량 데이터를 실시간으로 처리하고 분석합니다.
  • 데이터 통합: 다양한 소스에서 데이터를 수집하고 이를 통합하여 분석합니다.
  • 내결함성: 데이터 손실 없이 안정적으로 데이터를 저장하고 전송합니다.

 

Kafka의 기본 구성 요소

  • 메시지(Message)
    • 메시지는 Kafka를 통해 전달되는 데이터 단위입니다. 예를 들어, 로그 데이터나 이벤트 데이터가 메시지가 될 수 있습니다.
    • 메시지는 키(key), 값(value), 타임스탬프(timestamp), 그리고 몇 가지 메타데이터로 구성됩니다.
  • 프로듀서(Producer)
    • 메시지를 생성하고 Kafka에 보내는 역할을 합니다. 예를 들어, 웹 애플리케이션이 로그 데이터를 Kafka에 보내는 경우 프로듀서가 됩니다.
    • 프로듀서는 특정 토픽(topic)에 메시지를 보냅니다.
  • 토픽(Topic)
    • 메시지를 저장하는 장소입니다. 메시지는 토픽에 저장되었다가 소비자에게 전달됩니다.
    • 토픽은 여러 파티션(partition)으로 나누어질 수 있으며, 파티션은 메시지를 순서대로 저장합니다. 파티션을 통해 병렬 처리가 가능합니다.
    • 예: “user-activity”라는 토픽에 사용자의 활동 로그를 저장할 수 있습니다.
  • 파티션(Partition)
    • 파티션은 토픽을 물리적으로 나눈 단위로, 각 파티션은 독립적으로 메시지를 저장하고 관리합니다.
    • 각 파티션은 메시지를 순서대로 저장하며, 파티션 내의 메시지는 고유한 오프셋(offset)으로 식별됩니다.
    • 파티션을 통해 데이터를 병렬로 처리할 수 있으며, 클러스터 내의 여러 브로커에 분산시켜 저장할 수 있습니다.
  • 키(Key)
    • 키는 메시지를 특정 파티션에 할당하는 데 사용되는 값입니다.
    • 동일한 키를 가진 메시지는 항상 동일한 파티션에 저장됩니다.
    • 예를 들어, 특정 사용자 ID를 키로 사용하여 해당 사용자의 모든 이벤트가 동일한 파티션에 저장되도록 할 수 있습니다.
  • 컨슈머(Consumer)
    • 토픽에서 메시지를 가져와 처리하는 역할을 합니다.
    • 컨슈머는 특정 컨슈머 그룹(consumer group)에 속하며, 같은 그룹에 속한 컨슈머들은 토픽의 파티션을 분산 처리합니다.
    • 기본적으로 컨슈머는 스티키 파티셔닝(Sticky Partitioning)을 사용합니다. 이는 특정 컨슈머가 특정 파티션에 붙어서 계속해서 데이터를 처리하는 방식으로, 이는 데이터 지역성을 높여 캐시 히트율을 증가시키고 전반적인 처리 성능을 향상시킵니다.
  • 브로커(Broker)
    • Kafka 클러스터의 각 서버를 의미하며, 메시지를 저장하고 전송하는 역할을 합니다.
    • 하나의 Kafka 클러스터는 여러 브로커로 구성될 수 있으며, 각 브로커는 하나 이상의 토픽 파티션을 관리합니다.
  • 주키퍼(Zookeeper)
    • Kafka 클러스터를 관리하고 조정하는 데 사용되는 분산 코디네이션 서비스입니다.
    • 주키퍼는 브로커의 메타데이터를 저장하고, 브로커 간의 상호작용을 조정합니다.

 

Kafka와 RabbitMQ의 차이점

  • 설계 철학
    • RabbitMQ: 전통적인 메시지 브로커로, 메시지의 안정적 전달과 큐잉에 중점을 둡니다.
    • Kafka: 분산 스트리밍 플랫폼으로, 대규모 실시간 데이터 스트림의 저장과 분석에 중점을 둡니다.
  • 메시지 모델
    • RabbitMQ: 큐(queue)를 중심으로 메시지를 전달합니다. 메시지는 큐에 저장되고, 큐에서 하나 이상의 컨슈머에게 전달됩니다.
    • Kafka: 토픽(topic)을 중심으로 메시지를 저장합니다. 메시지는 토픽의 파티션에 저장되고, 컨슈머는 이 파티션에서 메시지를 읽습니다.
  • 메시지 지속성
    • RabbitMQ: 메시지를 메모리나 디스크에 저장할 수 있으며, 일반적으로 단기 저장을 목표로 합니다.
    • Kafka: 메시지를 디스크에 저장하며, 장기 저장을 목표로 합니다. 데이터 로그는 설정된 기간 동안 보존됩니다.
  • 사용
    • RabbitMQ: 작업 큐, 요청/응답 패턴, 비동기 작업 처리 등 전통적인 메시지 큐 사용 사례에 적합합니다.
    • Kafka: 실시간 데이터 스트리밍, 로그 수집 및 분석, 이벤트 소싱 등 대규모 데이터 스트림 처리에 적합합니다.

'대규모 시스템' 카테고리의 다른 글

SAGA Pattern  (0) 2024.08.14
Kafka 기본 설정  (0) 2024.08.14
RabbitMQ 기본 설정  (0) 2024.08.14
RabbitMQ란?  (0) 2024.08.14
대규모 시스템이란?  (0) 2024.08.14