Kafka

카프카(Kafka) 로컬 환경 구축과 기본 개념 정리

tues 2025. 9. 5. 21:57

1. Kafka 기본 구성 요소

📌 Producer

  • 메시지를 생성해서 Kafka 브로커(클러스터)에 전송하는 주체
  • 예: 회원가입 이벤트 발생 시 user.signed-up 메시지를 발행

📌 Broker

  • Kafka 서버 자체
  • Producer가 보낸 메시지를 받아서 토픽(Topic) 에 저장하고 Consumer에게 전달
  • 여러 개의 Broker가 모여 클러스터를 구성

📌 Topic

  • 메시지가 저장되는 카테고리
  • 예: demo.topic, user.signed-up, order.completed
  • 토픽은 여러 개의 파티션(Partition) 으로 나눠져서 분산 저장됨

📌 Partition & Offset

  • Partition: 토픽을 여러 조각으로 나눈 단위 → 병렬 처리 가능
  • Offset: 각 파티션에서 메시지가 기록되는 순번

📌 Consumer

  • Kafka 브로커에서 메시지를 가져와 처리하는 주체
  • 예: 이메일 서비스가 user.signed-up 메시지를 읽고 환영 메일 발송

📌 Consumer Group

  • 여러 Consumer가 협력해서 토픽을 분산 처리하는 구조
  • 같은 그룹 안에서는 한 파티션을 동시에 두 Consumer가 처리하지 않음


(출처: Apache Kafka 공식 문서)

https://kafka.apache.org/documentation/#introduction

 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

 

 

흐름:

  1. Producer가 메시지를 특정 Topic에 전송
  2. Broker는 메시지를 받아서 Partition 단위로 저장
  3. Consumer Group이 Topic을 구독하고 메시지를 가져옴
  4. Consumer는 메시지를 처리 (예: DB 저장, 알림 발송 등)

2. 로컬 환경 구성 (Docker Compose)

📌 docker-compose.yml

services:
  kafka:
    image: bitnami/kafka:latest
    ports:
      - "29092:29092"
    environment:
      - KAFKA_CFG_NODE_ID=0
      - KAFKA_CFG_PROCESS_ROLES=broker,controller
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,PLAINTEXT_HOST://:29092,CONTROLLER://:9093
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
      - KAFKA_ENABLE_KRAFT=yes

  kafka-ui:
    image: provectuslabs/kafka-ui:latest
    ports:
      - "8080:8080"
    environment:
      - KAFKA_CLUSTERS_0_NAME=local
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
    depends_on:
      - kafka

 

3. 토픽 생성 & 메시지 전송 실습

1) 토픽 생성

Kafka UI → Topics → Create Topic → demo.topic 생성

 

2) 메시지 보내기 (Producer)

docker compose exec -it kafka /opt/bitnami/kafka/bin/kafka-console-producer.sh --bootstrap-server kafka:9092 --topic demo.topic

 

hello
kafka
event-driven

 

3) 메시지 받기 (Consumer)

docker compose exec -it kafka /opt/bitnami/kafka/bin/kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic demo.topic --from-beginning

 

4. 정리 및 느낀 점

이번 실습을 통해:

  • Kafka의 기본 원리와 요소 (Producer, Broker, Topic, Consumer)를 이해하고
  • 로컬 환경에서 메시지를 발행하고 소비하는 과정을 직접 경험했습니다.

이 단계만으로도 “내 서비스가 이벤트를 Kafka로 흘려보내고, 다른 서비스가 이를 받아 처리한다”는 그림이 머리에 그려집니다.

'Kafka' 카테고리의 다른 글

Apache Kafka 공식 문서 보면서 핵심 기능 정리  (0) 2025.11.10
Kafka로 회원가입 이벤트 처리하기  (0) 2025.09.04
Kafka 시작하기  (0) 2025.08.31