카프카 구현하기 | Kafka

Faithful Dev·2025년 3월 12일

Apache Kafka는 분산 이벤트 스트리밍 플랫폼으로, 대용량의 데이터를 빠르고 안정적으로 처리하는 데 사용된다. 주로 실시간 데이터 처리, 로그 수집, 메시징 큐, 이벤트 소싱 등에 활용된다.


주요 개념

Producer & Consumer

  • Producer: 데이터를 Kafka에 전송하는 역할 (ex. 로그, IoT 센서 데이터, 트랜잭션 이벤트)
  • Consumer: Kafka에서 데이터를 읽어 가는 역할 (ex. 분석 시스템, 데이터베이스, 알림 서비스)

Topic & Partition

  • Topic: 데이터 스트림을 논리적으로 분리하는 개념 (ex. user-events, order-events)
  • Partition: Topic을 여러 개의 조각으로 나누어 병렬로 처리 가능하게 함
    • 각 Partition은 여러 Broker에 분산 저장됨
    • Consumer는 여러 Partition을 병렬로 읽을 수 있음

Broker

  • Kafka 클러스터를 구성하는 서버 노드
  • 여러 개의 Broker가 하나의 Kafka 클러스터를 구성함
  • 각 Broker는 특정 Topic의 Partition을 저장 및 관리함

Zookeeper

  • Kafka의 메타데이터 및 클러스터 상태를 관리
  • Leader ElectionConfiguration Management 역할 수행
  • Kafka 2.8 버전부터 Zookeeper를 제거하는 KRaft (Kafka Raft)가 도입됨

동작 방식

  1. Producer가 메시지를 특정 Topic으로 전송: 메시지는 Partition 단위로 저장됨
  2. Broker는 메시지를 로그 형태로 저장: 메시지는 Consumer가 읽을 때까지 유지됨
  3. Consumer는 Topic에서 데이터를 읽음: Offset을 관리하여 중복 처리 방지
  4. ConsumerGroup을 사용하면 병렬 처리 가능: 동일한 Consumer Group 내에서 각 Consumer는 서로 다른 Partition을 소비

주요 특징

높은 처리량 & 확장성

  • 수백만 TPS(초당 트랜잭션)를 처리할 수 있음
  • Partition을 이용한 병렬 처리 지원

내결함성 (Falut Tolerance)

  • Replication을 통해 데이터 유실 방지
  • Broker 장애 시 자동으로 Leader를 선출하여 운영 지속

지속성 (Durability)

  • 메시지가 디스크에 저장됨 (Commig Log 구조)
  • Consumer가 메시지를 읽을 때까지 유지됨

유연한 메시지 소비 방식

  • Pub-Sub (Publish-Subscribe) 모델 지원
  • Consumer는 메시지를 순서대로 읽거나 특정 Offset부터 다시 읽을 수 있음

활용 사례

  • 로그 수집 및 분석: ELK 스택과 연동하여 실시간 로그 분석
  • 메시지 큐 역할: RabbitMQ, ActiveMQ 대체 가능
  • 이벤트 기반 아키텍처: 마이크로서비스 간 이벤트 전파
  • IoT 데이터 처리: 센서 데이터 스트리밍 및 실시간 분석
  • 데이터 파이프라인: Hadoop, Spark, Flink 등과 연동하여 대용량 데이터 처리

관련 주요 기술 스택

  • Kafka Streams: Kafka 데이터를 실시간으로 변환 및 처리
  • Kafka Connect: 데이터베이스, 클라우드, 파일 시스템 등과 연동하는 커넥터 제공
  • Schema Registry: Avro, Protobuf 등을 사용하여 메시지 구조 관리

설치 및 실행

Homebrew를 이용해 Kafka 설치

brew install kafka

Kafka 서버 실행

zookeeper-server-start /opt/homebrew/etc/kafka/zookeeper.properties &
kafka-server-start /opt/homebrew/etc/kafka/server.properties &

Topic 생성

kafka-topics --create --topic test-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1

Producer 실행

kafka-console-producer --topic test-topic --bootstrap-server localhost:9092

Consumer 실행

kafka-console-consumer --topic test-topic --from-beginning --bootstrap-server localhost:9092
profile
Turning Vision into Reality.

0개의 댓글