[대규모 스트림] Kafka

RyECODING·2024년 8월 19일

MSA

목록 보기
14/15

분산 스트리밍 플랫폼

  • 주로 실시간 데이터 피드의 빅 데이터 처리를 목적으로 사용
  • 메시지 큐와 유사하지만, 대용량 데이터 스트림을 저장하고 실시간으로 분석하거나 처리하는 데 중점
  • RabbitMQ보다 많은 처리량 but 어려움..ㅠ

✅ 역할

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

✅ 기본 구성 요소

  • 메세지 (Message)
    - 데이터 단위
  • 프로듀서 (Producer)
    • 메세지 생성
    • kafka에 보내는 역할
    • 특정 토픽에 메세지를 보낸다.
  • 토픽 (Topic)
    - 메세지 저장 장소
    • 메세지를 토픽에 저장했다가 소비자에게 전달
    • 토픽은 여러 파티션으로 나누어질 수 있음.
  • 파티션 (Partition)
    - 토픽을 물리적으로 나눈 단위
    • 각 파티션은 독립적으로 메세지 저장 및 관리
    • 각 파티션은 메세지를 순서대로 저장
  • 키 (Key)
    - 메세지를 특정 파티션에 할당하는 데 사용되는 값
    • 동일한 키를 가진 메세지는 항상 동일한 파티션에 저장됨.
      ex) 특정 사용자 id를 키로 사용하여 해당 사용자의 모든 이벤트를 동일한 파티션에 저장할 수 있음.
  • 컨슈머 (Consumer)
    - 토픽에서 메세지를 가져와 처리하는 역할
    • 컨슈머는 특정 컨슈머 그룹에 속함. 같은 그룹에 속한 컨슈머들은 토픽의 파티션을 분산 처리.
    • 기본적으로 컨슈머는 스티키 파티셔닝 사용.
      특정 컨슈머가 특정 파티션에 붙어서 계속해서 데이터를 처리하는 방식
      데이터 지역성을 높여 캐시 히트율 증가시키고 전반적인 처리 성능 향상시킴.
  • 브로커 (Broker)
    - kafka 클러스터의 각 서버
    • 메세지를 저장하고 전송하는 역할
    • 하나의 kafka 클러스터는 여러 브로커로 구성될 수 있음.
    • 각 브로커는 하나 이상의 토픽 파티션을 관리.
  • 주키퍼 (Zookeeper)
    - kafka 클러스틑 관리하고 조정하는 데 사용되는 분산 코디네이션 서비스
    • 브로커의 메타 데이터 저장.
    • 브로커 간의 상호작용 조정.

✅ docker로 설치하기

docker-compose.yml

  • 터미널에서 실행할 경우, docker-compose.yml의 디렉토리에서 실행하면 된다.
  • 실행 명령어 : docker compose up -d
  • 실행 중인 컨테이너 확인 : docker ps
version: '3.8'
services:
  zookeeper:
    image: wurstmeister/zookeeper:3.4.6
    platform: linux/amd64
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  kafka:
    image: wurstmeister/kafka:latest
    platform: linux/amd64
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:29092,OUTSIDE://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENERS: INSIDE://0.0.0.0:29092,OUTSIDE://0.0.0.0:9092
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  kafka-ui:
    image: provectuslabs/kafka-ui:latest
    platform: linux/amd64
    ports:
      - "8080:8080"
    environment:
      KAFKA_CLUSTERS_0_NAME: local
      KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:29092
      KAFKA_CLUSTERS_0_ZOOKEEPER: zookeeper:2181
      KAFKA_CLUSTERS_0_READONLY: "false"

profile
례코드

0개의 댓글