Kafka

Code_Builder·2024년 8월 16일
0
post-thumbnail

KafKa란?

분산 스트리밍 플랫폼(대량의 데이터를 실시간으로 처리하고 전송할 수 있는 시스템)으로,
주로 실시간 데이터 피드의 빅 데이터 처리를 목적으로 사용

역할

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

구성 요소

메시지(Message)
  • 메시지는 Kafka를 통해 전달되는 데이터 단위
    ex) 로그 데이터 Or 이벤트 데이터
    메시지는 키(key), 값(value), 타임스탬프(timestamp), 그리고 몇 가지 메타데이터로 구성됩니다.
프로듀서(Producer)
  • 메시지를 생성하고 Kafka에 보내는 역할을
    ex) 웹 애플리케이션이 로그 데이터를 Kafka에 보내는 경우 프로듀서가 됨
  • 프로듀서는 특정 토픽(topic)에 메시지를 보냄
토픽(Topic)
  • 메시지를 저장하는 장소로써 메시지는 토픽에 저장되었다가 소비자에게 전달
  • 토픽은 여러 파티션(partition)으로 나누어질 수 있으며, 파티션은 메시지를 순서대로 저장하며 파티션을 통해 병렬 처리가 가능
    ex) “user-activity”라는 토픽에 사용자의 활동 로그를 저장할 수 있음
파티션(Partition)
  • 파티션은 토픽을 물리적으로 나눈 단위로, 각 파티션은 독립적으로 메시지를 저장하고 관리
  • 각 파티션은 메시지를 순서대로 저장하며, 파티션 내의 메시지는 고유한 오프셋(offset)으로 식별

    오프셋(offset) : 특정 Partition 내에서 메시지를 고유하게 식별하는 정수

  • 파티션을 통해 데이터를 병렬로 처리할 수 있으며, 클러스터 내의 여러 브로커에 분산시켜 저장할 수 있음
키(Key)
  • 키는 메시지를 특정 파티션에 할당하는 데 사용되는 값
  • 동일한 키를 가진 메시지는 항상 동일한 파티션에 저장
  • ex) 특정 사용자 ID를 키로 사용하여 해당 사용자의 모든 이벤트가 동일한 파티션에 저장되도록 할 수 있음
컨슈머(Consumer)
  • 토픽에서 메시지를 가져와 처리하는 역할을 함
  • 컨슈머는 특정 컨슈머 그룹(consumer group)에 속하며, 같은 그룹에 속한 컨슈머들은 토픽의 파티션을 분산 처리함
  • 기본적으로 컨슈머는 스티키 파티셔닝(Sticky Partitioning)을 사용하며 이는 특정 컨슈머가 특정 파티션에 붙어서 계속해서 데이터를 처리하는 방식으로, 이는 데이터 지역성을 높여 캐시 히트율을 증가시키고 전반적인 처리 성능을 향상시킴

스티키 파티셔닝(Sticky Partitioning): Kafka에서 소비자(Consumer)가 특정 파티션(Partition)에 지속적으로 연결되어 데이터를 처리하는 방식

캐시 히트율: 캐시에서 데이터를 찾았을 때의 비율

브로커(Broker)
  • Kafka 클러스터의 각 서버를 의미하며, 메시지를 저장하고 전송하는 역할을 함
  • 하나의 Kafka 클러스터는 여러 브로커로 구성될 수 있으며, 각 브로커는 하나 이상의 토픽 파티션을 관리함
주키퍼(Zookeeper)
  • Kafka 클러스터를 관리하고 조정하는 데 사용되는 분산 코디네이션 서비스

    분산 코디네이션 서비스: 여러 서버나 노드로 구성된 분산 시스템에서 구성 요소 간의 조정, 상태 관리, 메타데이터 저장 등을 지원하는 서비스


RabbitMQ와의 차이는..??

(차이를 잘 모르겠지만 일단 찿은 정보 토대로 정리)

설계 측면

  • RabbitMQ: 전통적인 메시지 브로커로, 메시지의 안정적 전달과 큐잉에 중점

    큐잉: 메시지를 순서대로 저장하고 처리하는 방법

  • Kafka: 분산 스트리밍 플랫폼으로, 대규모 실시간 데이터 스트림의 저장과 분석에 중점

메시지 모델 측면

  • RabbitMQ: 큐(queue)를 중심으로 메시지를 전달, 메시지는 큐에 저장되고, 큐에서 하나 이상의 컨슈머에게 전달

  • Kafka: 토픽(topic)을 중심으로 메시지를 저장, 메시지는 토픽의 파티션에 저장되고, 컨슈머는 이 파티션에서 메시지를 읽음

메시지 지속성 측면

  • RabbitMQ: 메시지를 메모리나 디스크에 저장할 수 있으며, 일반적으로 단기 저장을 목표
  • Kafka: 메시지를 디스크에 저장하며, 장기 저장을 목표로 합니다. 데이터 로그는 설정된 기간 동안 보존

사용 측면

  • RabbitMQ: 작업 큐, 요청/응답 패턴, 비동기 작업 처리 등 전통적인 메시지 큐 사용 사례에 적합
  • Kafka: 실시간 데이터 스트리밍, 로그 수집 및 분석, 이벤트 소싱 등 대규모 데이터 스트림 처리에 적합

    이벤트 소싱: 데이터 상태 변화를 이벤트로 기록하고, 해당 이벤트들을 순차적으로 재생하여 현재 상태를 파악하는 방법

(솔직히 정리 및 리서치는 했지만 잘 모르겠다..................)

profile
사소한일에도 최선을 다하기

0개의 댓글

관련 채용 정보