kafka
[Kafka] Kafka 개념 및 기초 학습
JABHACK
2025. 2. 3. 20:30
Kafka 개념 및 기초 학습
Kafka를 학습하는 첫 단계로, Kafka가 무엇인지, 기존 메시지 큐와의 차이점, 기본적인 아키텍처 및 메시지 처리 방식을 이해하는 것이 중요합니다.
아래 내용을 따라가며 하나씩 익혀보세요.
📌 1. Kafka란 무엇인가? 어떤 문제를 해결하는가?
🔹 Kafka의 정의
Apache Kafka는 대량의 데이터를 빠르고 안정적으로 처리할 수 있는 분산 메시징 시스템입니다.
Pub/Sub(발행-구독) 모델을 기반으로 하며, 실시간 데이터 스트리밍과 로그 수집, 데이터 파이프라인 구축 등에 사용됩니다.
🔹 Kafka가 해결하는 문제
- 대량의 데이터 처리
- 기존 메시지 큐(RabbitMQ, ActiveMQ)로는 수천만 개 이상의 메시지를 처리하기 어려움
- 실시간 데이터 스트리밍
- Kafka는 이벤트 기반 시스템으로 실시간 분석 및 데이터 처리 가능
- 확장성 문제 해결
- Kafka는 분산 아키텍처 기반으로 확장성이 뛰어남
- 데이터 손실 최소화
- 디스크 기반 로그 저장을 사용하여 장애 발생 시 데이터 유실을 최소화
📌 2. Kafka vs 메시지 큐(RabbitMQ, ActiveMQ)
비교 항목 | Kafka | RabbitMQ / ActiveMQ |
데이터 처리 모델 | Pub/Sub (스트리밍 중심) | 큐 기반 (비동기 메시징) |
메시지 저장 방식 | 디스크 로그 기반 저장 (장기 보관 가능) | 메시지 소모 후 삭제 |
확장성 | 분산 시스템 (수평 확장 용이) | 노드 추가 시 관리 복잡 |
사용 사례 | 실시간 데이터 분석, 로그 수집, 이벤트 스트리밍 | 요청-응답 비동기 메시징 |
메시지 소비 방식 | Consumer Group 활용 (병렬 처리 가능) | 1:1 혹은 Pub/Sub 모델 |
메시지 순서 보장 | Partition 단위에서 순서 유지 | 일반적으로 순서 보장 없음 |
성능 | 초당 수백만 TPS 가능 | 수십만 TPS 수준 |
내구성 (Durability) | 디스크에 저장하여 복구 가능 | 메시지 소비 후 삭제 |
📌 결론:
- Kafka는 고성능, 확장성, 실시간 데이터 처리가 필요한 경우 유리
- RabbitMQ, ActiveMQ는 단순한 비동기 메시징(예: 주문 처리, 트랜잭션 큐) 용도로 적합
📌 3. Kafka 아키텍처 (Broker, Producer, Consumer, Topic, Partition, Offset)
Kafka는 분산 아키텍처로 동작하며, 주요 구성 요소는 다음과 같습니다.
🔹 Kafka의 주요 구성 요소
구성 요소 설명
구성 요소 | 설명 |
Broker | Kafka 서버 역할 (메시지 저장 및 관리) |
Producer | 메시지를 Kafka에 전송하는 클라이언트 |
Consumer | 메시지를 구독(소비)하는 클라이언트 |
Topic | 메시지가 저장되는 논리적 공간 (카테고리) |
Partition | Topic을 나누어 여러 Broker에 분산 저장 |
Offset | 메시지의 고유한 위치 (Consumer가 어디까지 읽었는지 저장) |
🔹 Kafka 데이터 흐름
- Producer가 Topic에 메시지를 전송
- Topic은 여러 개의 Partition으로 나뉘어 저장됨
- Broker가 Partition을 관리하고 데이터 저장
- Consumer는 특정 Topic을 구독하여 메시지를 가져감
- 메시지의 위치(Offset)를 사용하여 데이터를 추적
🔹 Kafka 구조 예시
Producer → [ Kafka Topic (Partition 0, 1, 2) ] → Consumer Group
- Producer가 메시지를 Kafka Topic에 전송
- Topic은 여러 개의 Partition으로 나뉘어 Broker에 분산 저장
- Consumer Group이 메시지를 읽고 처리
📌 4. 메시지 처리 방식 (Pub/Sub 모델 및 Consumer Group)
Kafka는 Pub/Sub(발행-구독) 모델을 사용합니다.
🔹 Pub/Sub 모델 (Publish-Subscribe)
- Producer가 메시지를 Topic에 게시
- 여러 개의 Consumer가 메시지를 구독 가능
- Consumer Group을 활용하여 메시지를 병렬로 처리 가능
🔹 Consumer Group 활용
Kafka에서는 Consumer Group을 사용하여 메시지를 효과적으로 분산 처리합니다.
Consumer | Group 방식 설명 |
Single Consumer | 하나의 Consumer가 모든 메시지를 소비 |
Multiple Consumers | 여러 개의 Consumer가 각기 다른 Partition을 소비 |
Consumer Group | 여러 Consumer가 하나의 그룹으로 묶여 병렬 처리 |
예시
- Topic에 3개의 Partition이 있고, **2개의 Consumer(C1, C2)**가 있다면:
- C1이 Partition 0, 1을 소비
- C2가 Partition 2를 소비
장점: Consumer Group을 사용하면 부하를 분산하여 처리 속도를 향상할 수 있습니다.
📌 5. Kafka 설치 및 실행 (로컬 & Docker)
Kafka를 실습하려면 직접 설치하고 실행해보는 것이 중요합니다.
🔹 Kafka 로컬 설치 (Zookeeper 포함)
# Kafka 다운로드
wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
tar -xzf kafka_2.13-3.6.0.tgz
cd kafka_2.13-3.6.0
# Zookeeper 실행
bin/zookeeper-server-start.sh config/zookeeper.properties &
# Kafka 실행
bin/kafka-server-start.sh config/server.properties &
🔹 Docker로 Kafka 실행
docker-compose up -d
📌 Docker-Compose 예시 파일
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
ports:
- "9092:9092"
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
📌 6. 기본 CLI 명령어 (Topic 생성, 메시지 전송 및 소비 테스트)
Kafka의 기본 명령어를 사용하여 직접 테스트해봅니다.
🔹 Topic 생성
bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1
🔹 Producer 메시지 전송
bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
> Hello Kafka! # 메시지 입력 후 Enter
🔹 Consumer 메시지 수신
bin/kafka-console-consumer.sh --topic test-topic --bootstrap-server localhost:9092 --from-beginning
출력 예시:
Hello Kafka!
✅ 정리
주제 | 요약 |
Kafka 개념 | 대량 데이터 처리, 실시간 스트리밍을 위한 분산 메시징 시스템 |
Kafka vs 메시지 큐 | 메시지 큐(RabbitMQ)보다 확장성과 성능이 뛰어남 |
Kafka 아키텍처 | Producer → Topic(Partition) → Consumer Group 구조 |
Pub/Sub 모델 | 다수의 Consumer가 메시지를 병렬 처리 가능 |
Kafka 설치 | 로컬 또는 Docker로 쉽게 실행 가능 |
CLI 테스트 | Topic 생성, 메시지 전송 및 소비 |
Kafka의 기본 개념과 동작 방식이 이해되었다면, 이제 실제 애플리케이션과 연동하는 방법을 학습하면 좋습니다! 🚀