본문 바로가기
Message Queue/Kafka

Apache Kafka 기본 지식

by 응애~ 개발자 2025. 5. 29.
728x90
반응형

Apache Kafka 기본 지식 - 완벽 가이드

📚 Kafka란 무엇인가?

Apache Kafka는 분산형 스트리밍 플랫폼으로, 대용량의 실시간 데이터를 안정적으로 처리하기 위해 개발된 오픈소스 시스템입니다. LinkedIn에서 2011년에 처음 개발되어 현재는 Netflix, Uber, Airbnb 등 많은 글로벌 기업에서 활용하고 있습니다.

간단히 말하면, Kafka는 메시지를 보내는 곳(Producer)과 받는 곳(Consumer) 사이의 우체국 역할을 한다고 생각하면 됩니다.

🎯 Kafka를 사용하는 이유

전통적인 방식의 문제점

여러 시스템이 서로 데이터를 주고받을 때, 각각을 직접 연결하면 복잡한 구조가 만들어집니다. 시스템이 늘어날수록 연결점은 기하급수적으로 증가하죠.

Kafka가 해결하는 것들

  • 확장성: 대용량 데이터를 처리할 수 있음
  • 내결함성: 서버 장애 시에도 데이터 손실 없이 동작
  • 고성능: 초당 수백만 건의 메시지 처리 가능
  • 실시간 처리: 데이터를 실시간으로 스트리밍

🏗️ Kafka의 핵심 구성 요소

1. Topic (토픽)

메시지가 저장되는 카테고리 또는 폴더와 같은 개념입니다.

  • 예: user-activity, order-events, payment-logs

2. Partition (파티션)

토픽을 여러 개로 나눈 물리적 저장 단위입니다.

  • 병렬 처리를 통한 성능 향상
  • 데이터는 파티션에 순서대로 저장됨

3. Producer (프로듀서)

메시지를 생산하고 전송하는 애플리케이션입니다.

  • 웹 애플리케이션, IoT 센서, 로그 수집기 등

4. Consumer (컨슈머)

메시지를 구독하고 처리하는 애플리케이션입니다.

  • 데이터베이스, 분석 시스템, 알림 서비스 등

5. Broker (브로커)

Kafka 서버 자체를 의미하며, 메시지를 저장하고 관리합니다.

  • 일반적으로 3개 이상의 브로커로 클러스터 구성

6. Zookeeper

Kafka 클러스터의 메타데이터와 설정을 관리합니다.

  • 브로커 상태 모니터링
  • 리더 선출 및 설정 동기화

📊 Kafka 동작 원리

기본 플로우

  1. Producer가 특정 Topic에 메시지 전송
  2. Broker가 메시지를 Partition에 저장
  3. Consumer가 Topic을 구독하여 메시지 수신
  4. Consumer가 메시지를 처리

Offset 개념

각 메시지는 Partition 내에서 고유한 Offset(순서 번호)를 가집니다. Consumer는 이 Offset을 통해 어디까지 메시지를 읽었는지 추적합니다.

🚀 주요 특징과 장점

1. 높은 처리량 (High Throughput)

  • 디스크 기반 순차 읽기/쓰기로 높은 성능 달성
  • 배치 처리를 통한 네트워크 효율성 향상

2. 내결함성 (Fault Tolerance)

  • 데이터를 여러 브로커에 복제하여 안정성 확보
  • 브로커 장애 시 자동 복구

3. 확장성 (Scalability)

  • 브로커와 파티션을 추가하여 수평 확장 가능
  • Consumer Group을 통한 병렬 처리

4. 영속성 (Durability)

  • 메시지를 디스크에 영구 저장
  • 설정 가능한 보존 기간

💼 실제 사용 사례

1. 로그 수집 및 분석

웹 서버 → Kafka → ELK Stack → 대시보드

2. 실시간 이벤트 처리

사용자 행동 → Kafka → 실시간 추천 시스템

3. 마이크로서비스 간 통신

주문 서비스 → Kafka → 재고 서비스, 결제 서비스

4. 데이터 파이프라인

데이터베이스 → Kafka → 데이터 웨어하우스

⚙️ Kafka 설치 및 기본 설정

1. Java 설치 확인

java -version

2. Kafka 다운로드

wget https://archive.apache.org/dist/kafka/2.8.0/kafka_2.13-2.8.0.tgz
tar -xzf kafka_2.13-2.8.0.tgz
cd kafka_2.13-2.8.0

3. Zookeeper 시작

bin/zookeeper-server-start.sh config/zookeeper.properties

4. Kafka 서버 시작

bin/kafka-server-start.sh config/server.properties

5. 기본 명령어

# 토픽 생성
bin/kafka-topics.sh --create --topic my-topic --bootstrap-server localhost:9092

# 메시지 전송
bin/kafka-console-producer.sh --topic my-topic --bootstrap-server localhost:9092

# 메시지 수신
bin/kafka-console-consumer.sh --topic my-topic --from-beginning --bootstrap-server localhost:9092

🎨 Consumer Group 이해하기

Consumer Group은 여러 Consumer가 협력하여 메시지를 처리하는 방식입니다.

주요 특징

  • 같은 그룹 내 Consumer들은 파티션을 나누어 처리
  • 한 파티션은 그룹 내 하나의 Consumer만 처리
  • Consumer 추가/제거 시 자동으로 파티션 재분배

예시

Topic: user-events (3개 파티션)
Consumer Group: analytics-group (2개 Consumer)

Consumer 1: Partition 0, 1 처리
Consumer 2: Partition 2 처리

📈 성능 최적화 팁

1. 파티션 수 설정

  • CPU 코어 수의 2-3배로 설정
  • 너무 많으면 오버헤드 증가

2. 배치 크기 조정

# Producer 설정
batch.size=32768
linger.ms=5

3. 복제 인수 설정

# 안정성과 성능의 균형
replication.factor=3
min.insync.replicas=2

⚠️ 주의사항 및 모범 사례

1. 메시지 순서

  • 파티션 내에서만 순서 보장
  • 전체 토픽 순서가 중요하면 파티션 1개 사용

2. 키(Key) 설계

  • 동일한 키를 가진 메시지는 같은 파티션으로 전송
  • 키 분산이 파티션 분산에 영향

3. 모니터링

  • 브로커 상태, Consumer Lag, 처리량 모니터링 필수
  • JMX, Prometheus 등 활용

🔮 Kafka의 미래

Kafka는 지속적으로 발전하고 있으며, 다음과 같은 방향으로 진화하고 있습니다:

  • Kafka Streams: 실시간 스트림 처리 라이브러리
  • KSQL: SQL로 스트림 데이터 처리
  • Kafka Connect: 다양한 시스템과의 연동 간소화
  • Schema Registry: 스키마 관리 및 호환성 보장

마무리

Apache Kafka는 현대적인 데이터 아키텍처의 핵심 구성 요소로 자리잡았습니다. 실시간 데이터 처리가 중요해진 오늘날, Kafka를 이해하고 활용하는 것은 개발자에게 필수적인 역량이 되었습니다.

처음에는 복잡해 보일 수 있지만, 기본 개념을 차근차근 익히고 실습을 통해 경험을 쌓는다면 누구나 Kafka를 마스터할 수 있습니다. 여러분의 프로젝트에 Kafka를 도입해보시고, 실시간 데이터 처리의 강력함을 직접 경험해보세요!


이 글이 도움이 되었다면 좋아요와 공유 부탁드립니다. Kafka에 대한 더 자세한 내용이나 궁금한 점이 있다면 댓글로 남겨주세요!

728x90
반응형