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 |