Infra

Kafka 카프카

baek-dev 2025. 2. 2. 14:43

Apache Kafka(아파치 카프카)는 분산형 이벤트 스트리밍 플랫폼으로, 실시간 데이터 스트림을 처리하고 저장하며 발행-구독(Pub/Sub) 모델을 지원하는 시스템임. 대규모 데이터 처리, 로그 수집, 분석, 메시지 브로커 등 다양한 용도로 사용됨.

Kafka는 높은 확장성, 내구성, 처리 성능을 제공하여, 대규모 시스템의 실시간 데이터 파이프라인과 스트리밍 애플리케이션에서 자주 사용됨.

 

Kafka의 주요 개념 및 구성 요소

 

1. 토픽(Topic)

Kafka에서 데이터를 저장하고 전달하는 기본 단위.

데이터가 로그(log) 형식으로 기록되며, 각 메시지는 특정 토픽에 게시(publish)됨.

토픽은 **파티션(Partition)**으로 나뉘며, 데이터는 각 파티션에 분산 저장.

 

2. 프로듀서(Producer)

데이터를 **토픽에 게시(publish)**하는 역할을 수행.

메시지를 특정 토픽의 파티션에 전송.

 

3. 컨슈머(Consumer)

특정 토픽으로부터 메시지를 **구독(consume)**하는 역할.

컨슈머 그룹(Consumer Group)을 구성하여 여러 컨슈머가 병렬로 메시지를 처리할 수 있음.

 

4. 브로커(Broker)

Kafka 서버 역할을 수행하며, 토픽의 데이터를 저장하고 전달.

클러스터 구성 시 여러 브로커가 협력하여 데이터를 분산 저장.

 

5. 파티션(Partition)

토픽을 나눈 하위 단위로, 데이터 분산병렬 처리를 가능하게 함.

각 파티션은 고유한 번호와 메시지의 오프셋(offset)을 가짐.

 

6. 오프셋(Offset)

파티션 내에서 각 메시지의 고유 ID.

컨슈머는 오프셋을 기준으로 메시지를 읽음.

 

7. 리더와 팔로워(Leader and Follower)

각 파티션에는 **리더(Leader)**와 하나 이상의 **팔로워(Follower)**가 존재.

모든 읽기/쓰기 요청은 리더를 통해 처리되며, 팔로워는 리더의 데이터를 복제.


Kafka의 주요 특징

1. 높은 처리량

수백 MB/초의 데이터 처리 속도를 지원.

분산 시스템을 통해 병렬로 작업 처리.

 

2. 내구성

데이터를 디스크에 저장하고, 복제를 통해 데이터 유실을 방지.

 

3. 확장성

브로커와 파티션을 추가하여 클러스터를 쉽게 확장 가능.

 

4. 분산 시스템

데이터를 여러 브로커와 파티션에 분산 저장하여 고가용성과 처리 성능 제공.

 

5. 실시간 처리

프로듀서가 데이터를 게시하면, 컨슈머가 실시간으로 메시지를 읽을 수 있음.

 

6. Pub/Sub 및 큐 기능

Kafka는 발행-구독(Pub/Sub) 모델과 메시지 큐 기능을 모두 지원.


Kafka의 주요 동작 방식

1. 프로듀서 → 브로커

프로듀서는 데이터를 특정 토픽의 브로커로 전송.

데이터는 토픽 내의 파티션에 저장.

 

2. 브로커 → 컨슈머

컨슈머는 특정 토픽의 데이터를 구독.

각 컨슈머는 오프셋을 기준으로 메시지를 읽음.

 

3. 파티션과 병렬 처리

파티션을 통해 데이터를 분산 저장하고 병렬 처리.

컨슈머 그룹을 활용하여 여러 컨슈머가 파티션을 병렬로 처리.

 

4. 복제와 장애 복구

파티션의 데이터를 복제하여, 리더 브로커 장애 시 팔로워 브로커가 리더 역할을 수행.


Kafka 사용 사례

1. 로그 및 이벤트 수집

애플리케이션에서 발생하는 로그와 이벤트를 실시간으로 수집하여 분석.

예: 서버 로그, 사용자 행동 로그.

 

2. 데이터 파이프라인

데이터가 다양한 소스에서 생성되어, 실시간 또는 배치 처리 시스템으로 전달.

예: 데이터베이스 → 데이터 웨어하우스.

 

3. 실시간 스트리밍

실시간 분석이 필요한 시스템에서 사용.

예: 실시간 주문 처리, 사용자 활동 추적.

 

4. 메시지 브로커

시스템 간 메시지를 전달하는 브로커 역할.

예: 마이크로서비스 간의 통신.

 

5. IoT 데이터 수집

IoT 기기에서 발생하는 데이터를 실시간으로 수집.

예: 센서 데이터.

 

6. 실시간 알림 시스템

사용자 행동에 따라 실시간 알림을 생성.


Kafka 설치 및 실행

 

1. Kafka 설치 (Docker)

docker-compose.yml
version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
    ports:
      - 2181:2181

  kafka:
    image: confluentinc/cp-kafka
    depends_on:
      - zookeeper
    ports:
      - 9092:9092
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_BROKER_ID: 1

실행:

docker-compose up -d

 

2. Kafka 기본 명령어

 

토픽 관리

토픽 생성:

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

 

토픽 목록 확인:

kafka-topics --list --bootstrap-server localhost:9092

 

 

메시지 전송 및 수신

메시지 전송:

kafka-console-producer --broker-list localhost:9092 --topic test-topic

 

메시지 수신:

kafka-console-consumer --bootstrap-server localhost:9092 --topic test-topic --from-beginning

Kafka 장점과 단점

 

장점

1. 높은 성능

분산 구조로 인해 대량의 데이터를 빠르게 처리 가능.

 

2. 확장성

브로커와 파티션을 추가하여 쉽게 확장 가능.

 

3. 내구성

데이터를 디스크에 저장하고 복제하여 데이터 유실 방지.

 

4. 유연성

Pub/Sub, 메시지 큐, 실시간 스트리밍 등 다양한 사용 가능.

 

단점

1. 복잡성

초기 설정과 운영이 비교적 복잡.

클러스터링과 데이터 분산 관리가 어렵게 느껴질 수 있음.

 

2. 메시지 순서 보장 제한

파티션 단위로만 순서 보장. 파티션 간 순서는 보장되지 않음.

 

3. 자원 사용량

높은 처리량과 내구성을 위해 메모리와 디스크 사용량이 많음.

 

Kafka 요약

Apache Kafka는 실시간 데이터 스트리밍 및 분산 메시징 플랫폼으로, 확장성, 내구성, 높은 성능을 제공하는 강력한 도구임. 대규모 데이터 파이프라인과 실시간 분석 시스템을 구축하는 데 적합하며, 로그 수집, 이벤트 스트림 처리, 메시지 브로커 등 다양한 용도로 활용됨.

 

 

 

 

출처 : ChatGPT

'Infra' 카테고리의 다른 글

Micrometer  (1) 2025.04.10
Prometheus  (0) 2025.04.09
Grafana  (0) 2025.04.08
리버스 프록시  (1) 2025.04.03
메시지 브로커(Message Broker)  (0) 2025.03.15