카프카(Kafka) 이해하기

카프카(Kafka)란?

# feat.wikipedia

아파치 카프카(Apache Kafka)는 아파치 소프트웨어 재단이 스칼라로 개발한 오픈 소스 메시지 브로커 프로젝트이다. 이 프로젝트는 실시간 데이터 피드를 관리하기 위해 통일된, 높은 처리량, 낮은 지연시간을 지닌 플랫폼을 제공하는 것이 목표이다.

카프카의 탄생 배경

# feat.chatGPT

Kafka는 2011년 LinkedIn에서 대규모 실시간 로그 처리와 스트리밍 데이터 파이프라인을 구축하기 위해 개발되었습니다. 당시 LinkedIn은 방대한 양의 데이터를 실시간으로 수집하고 처리할 필요가 있었고, 이를 위해 기존의 메시징 시스템으로는 충분히 확장 가능하지 않다고 판단했습니다.

Kafka는 이런 요구 사항을 해결하기 위해 탄생했으며, 다음과 같은 목적을 가지고 있었습니다:

높은 처리량과 확장성을 가진 분산 메시징 시스템.
대규모 데이터를 실시간으로 스트리밍하고 처리할 수 있는 시스템.
로그 데이터와 같은 실시간 이벤트 데이터를 안정적으로 저장하고 전송할 수 있는 플랫폼.

카프카 구조

카프카 구조

카파카 구조는 위와 같다. 위 사진에 포함된 요소의 계층이다.(클릭하면 해당 부분으로 이동한다.)

  • Zookeper
  • Cluster
    • Broker
      • Topic
      • Partition
        • Leader
        • Follower
  • Consumer Group
    • Consumer
  • Producer

Cluster

클러스터는 브로커들의 집합체를 의미한다.

Broker

브로커는 카프카 클러스터 내에서 데이터를 저장하고 관리하는 노드를 의미한다. 클러스터 내에 여러 개의 브로커가 존재할 수 있고, 이때 각 브로커는 주어진 토픽의 파티션을 관리한다.

Topic

토픽은 카프카에서 데이터를 분류하기 위해 사용되는 논리적인 개념이다. 즉, 데이터를 구분하기 위해 사용되는 이름 혹은 라벨이라고 생각하면 된다.

  • Partiton

    토픽을 물리적으로 나누는 단위. 각 파티션은 고유한 offset을 통해 메시지를 관리하고, replication을 통해 다른 브로커에 복제된 파티션(팔로워 파티션)을 만들 수 있다.

  • Partition > Leader

    리더 파티션은 프로듀서로부터 전달받은 데이터를 저장한다.

  • Partition > Follower

    이때 다른 브로커에 존재하는 같은 파티션의 팔로워 파티션은 리더 파티션의 데이터를 복제해 저장한다. 보험용이다. 그래서 팔로워 파티션은 있어도 되고 없어도 된다. 복제되는 팔러워 파티션의 개수는 replication factor에 의해 결정된다.

Producer

프로튜서는 메시지를 생산해서 브로커의 토픽을 지정해 메시지를 전송하는 모든 객체를 의미한다. 이는 애플리케이션 혹은 서버일 것이다.

이때 프로듀서는 해당 토픽 내의 리더 파티션과 통신한다.

Consumer Group

동일한 토픽을 구독한 컨슈머를 위한 그룹. 토픽의 하나의 파티션은 하나의 컨슈머 그룹 내에서 단 한 명의 컨슈머에게만 할당된다.

Zookeper

주키퍼는 클러스터 설정 정보 유지 및 브로커 추가나 제외 등의 작업을 관리하는 시스템이다.

간단한 카프카 실습

도커를 이용해 카프카를 이용하는 간단한 에제입니다.( chatGPT 질문 내용 )

Kafka를 Docker로 구성하는 것은 로컬 개발 환경이나 테스트 환경에서 Kafka 클러스터를 빠르게 설정하는 데 유용합니다. 아래는 Docker를 사용해 Kafka를 구성하는 단계별 가이드입니다.

  1. Docker 및 Docker Compose 설치 먼저, Docker와 Docker Compose가 설치되어 있는지 확인하세요. 만약 설치되어 있지 않다면, Docker 공식 웹사이트에서 설치할 수 있습니다.

Docker 설치: Docker 설치 가이드 Docker Compose 설치: Docker Compose 설치 가이드

  1. Docker Compose 파일 작성 Kafka와 Zookeeper를 함께 실행하기 위해 Docker Compose 파일을 작성합니다. Zookeeper는 Kafka 클러스터에서 브로커를 관리하기 위해 필요합니다.

아래는 docker-compose.yml 파일의 예시입니다.

version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.3.1
    hostname: zookeeper
    container_name: zookeeper
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  kafka:
    image: confluentinc/cp-kafka:7.3.1
    hostname: kafka
    container_name: kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
    depends_on:
      - zookeeper

  1. Docker Compose 파일 설명 Zookeeper:

image: Zookeeper의 Docker 이미지입니다. ZOOKEEPER_CLIENT_PORT: Zookeeper가 클라이언트와 통신하는 포트입니다. ZOOKEEPER_TICK_TIME: Zookeeper의 시간 간격 설정입니다. Kafka:

image: Kafka의 Docker 이미지입니다. KAFKA_BROKER_ID: Kafka 브로커의 고유 ID입니다. KAFKA_ZOOKEEPER_CONNECT: Zookeeper의 호스트와 포트입니다. KAFKA_ADVERTISED_LISTENERS: Kafka 브로커가 클라이언트에게 자신을 광고하는 주소입니다. KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 오프셋 토픽의 복제 계수입니다.

  1. Docker Compose 실행 Docker Compose 파일을 작성한 디렉토리에서 다음 명령어를 실행하여 Kafka와 Zookeeper를 시작합니다.
docker-compose up -d

이 명령어는 백그라운드에서 Zookeeper와 Kafka 컨테이너를 시작합니다.

  1. Kafka 클러스터 상태 확인 Kafka와 Zookeeper가 정상적으로 실행되었는지 확인하려면 다음 명령어로 로그를 확인할 수 있습니다.
docker-compose logs -f kafka

Kafka 브로커가 제대로 실행되고 PLAINTEXT://localhost:9092에서 리스닝 중인지 확인할 수 있습니다.

  1. Kafka CLI 도구를 사용한 토픽 및 메시지 관리 Kafka CLI 도구를 사용하여 Kafka 클러스터와 상호 작용할 수 있습니다. Kafka CLI는 Kafka 컨테이너 내부에서 실행할 수 있습니다.

예를 들어, 새로운 토픽을 생성하려면 다음 명령어를 실행합니다.

docker exec -it kafka kafka-topics --create --topic my-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

이 명령어는 my-topic이라는 이름의 토픽을 생성합니다.

  1. 메시지 프로듀서 및 컨슈머 실행 Kafka CLI를 사용하여 메시지를 전송하고 수신할 수 있습니다.

메시지 전송 (프로듀서 실행):

docker exec -it kafka kafka-console-producer --topic my-topic --bootstrap-server localhost:9092

이 명령어를 실행하면 메시지를 입력할 수 있으며, 입력한 메시지는 my-topic 토픽으로 전송됩니다.

메시지 수신 (컨슈머 실행):

docker exec -it kafka kafka-console-consumer --topic my-topic --bootstrap-server localhost:9092 --from-beginning

이 명령어를 실행하면 my-topic 토픽에 있는 모든 메시지를 처음부터 읽어옵니다.

  1. Kafka와 Zookeeper 종료 Kafka와 Zookeeper를 종료하려면 다음 명령어를 실행합니다.
docker-compose down

results matching ""

    No results matching ""