1. Kafka 개념

Kafka는 분산형 스트리밍 플랫폼으로, 주로 대용량 실시간 데이터 처리, 로그 수집, 이벤트 소싱 등에 사용됩니다. 핵심 특징은 다음과 같습니다:

  • Publish-Subscribe 모델: Producer가 메시지를 보내고 Consumer가 구독함.
  • 분산형: 여러 브로커(서버)에 데이터를 분산 저장.
  • 내결함성(fault-tolerance): 데이터를 복제(Replication)하여 브로커 장애에도 데이터 손실 최소화.
  • 높은 처리량(high throughput): 배치 전송, 디스크 기반 구조로 초당 수백만 메시지 처리 가능.
  • 저지연(low latency): 일반적으로 ms 단위 메시지 전달.

2. Kafka 구조

2.1 Broker

  • Kafka 서버 단위.
  • 클러스터는 여러 브로커로 구성되며, 각각 독립적으로 메시지를 저장하고 전달.
  • 브로커는 Leader-Follower 구조로 토픽 파티션 관리.

2.2 Topic & Partition

  • Topic: 메시지의 카테고리 또는 스트림. 예: user-events
  • Partition: Topic의 물리적 분할 단위. 데이터는 파티션 단위로 저장.
  • Partition은 순서를 보장하며, Leader 브로커가 해당 파티션 요청을 처리.

2.3 Producer

  • 데이터를 Kafka로 보내는 클라이언트.
  • Key 기반 파티셔닝 가능 (같은 Key는 같은 파티션으로).

2.4 Consumer

  • Kafka에서 데이터를 읽는 클라이언트.
  • Consumer Group으로 묶이면 파티션별 메시지를 병렬 처리 가능.
  • Offset 관리: Consumer가 어디까지 메시지를 읽었는지 기록.

2.5 Zookeeper / KRaft

  • 과거에는 Zookeeper가 브로커 메타데이터, Leader 선출, 토픽 관리에 사용됨.
  • 최신 Kafka(3.x 이상)에서는 KRaft 모드(Zookeeper 없이 Kafka 자체적으로 메타데이터 관리) 지원.

3. 메시지 흐름

 
Producer -> Broker(Partition) -> Consumer
  1. Producer가 메시지를 특정 Topic에 발행.
  2. Topic은 하나 이상의 Partition으로 나뉨.
  3. Partition의 Leader 브로커가 메시지 기록 및 복제(Follower) 수행.
  4. Consumer는 Offset 기반으로 Partition을 읽음.
  5. Consumer Group을 사용하면 각 Partition은 한 그룹 내 Consumer에게만 전달되어 병렬 처리 가능.

4. 데이터 저장과 내구성

  • 메시지는 디스크에 순차적으로 Append.
  • Replication: 각 Partition은 Leader + N개의 Follower로 복제.
  • ACK 모드:
    • acks=0: Producer가 확인 없이 전송.
    • acks=1: Leader 브로커가 기록 완료 시 ACK.
    • acks=all/-1: Leader+Follower가 모두 기록 완료 시 ACK.
  • Retention: 메시지를 일정 기간 또는 크기 기준으로 유지 후 삭제.

5. 성능 최적화 포인트

  1. Batching: Producer 배치 전송 → 네트워크 효율 증가.
  2. Compression: 메시지 압축 (gzip, snappy, lz4) → I/O 감소.
  3. Partition 수 조정: Consumer 병렬 처리 가능성 결정.
  4. Consumer Poll 주기: poll 주기와 처리 속도 균형.
  5. Replication Factor: 데이터 안정성과 브로커 부하 균형.

6. Kafka vs RabbitMQ (간단 비교)

항목 Kafka RabbitMQ
메시지 모델 Publish-Subscribe Queue
메시지 저장 디스크 기반, 순차적 저장 메모리/디스크 혼합
처리량 매우 높음 낮음~중간
내구성 복제 + 로그 기반 ACK 기반, Queue에 저장
순서 보장 Partition 단위 Queue 단위
사용 케이스 로그, 이벤트 스트리밍, 빅데이터 Task Queue, RPC

7. 활용 사례

7-1. 실시간 데이터 파이프라인 (Real-time Data Pipeline)

목적: 다양한 시스템에서 발생하는 데이터를 실시간으로 수집, 처리, 전송
상세 사례:

  • 웹/모바일 로그 수집
    • 클릭, 페이지뷰, 사용자 행동 로그를 Kafka 토픽으로 수집
    • 실시간 분석 플랫폼(예: Flink, Spark Streaming)으로 전달
    • 장점: 로그 손실 없이 안정적 처리, 높은 처리량
  • 센서/IoT 데이터 스트리밍
    • 스마트 공장, 차량, IoT 디바이스에서 발생하는 센서 데이터 수집
    • Kafka Connect를 활용해 데이터베이스, 시계열 DB, 모니터링 시스템으로 전달

사용 기술: Kafka Connect, Kafka Streams, Spark/Flink

 

7-2. 실시간 이벤트 처리 (Real-time Event Processing)

목적: 이벤트 기반 서비스에서 발생하는 이벤트를 실시간으로 처리
상세 사례:

  • 금융 트랜잭션 모니터링
    • 은행 거래 발생 시 이벤트를 Kafka로 전달
    • 사기 탐지 시스템에서 실시간으로 분석 후 알람 발생
  • 온라인 게임 서버 이벤트 처리
    • 게임 내 유저 활동, 점수, 아이템 획득 이벤트를 실시간 처리
    • 리더보드, 인게임 알림, 추천 시스템 즉시 반영

사용 기술: Kafka Streams, KSQL, Flink

 

7-3. 메시지 브로커 대체 (Messaging Backbone)

목적: 기존 메시지 큐(RabbitMQ, ActiveMQ 등)를 대체하여 높은 처리량과 내구성 제공
상세 사례:

  • 마이크로서비스 통신
    • 서비스 간 이벤트 전달, 상태 변경 알림
    • 장점: 서비스 간 느슨한 결합, 내구성 확보, 재시도 자동화
  • 비동기 작업 처리
    • 주문 처리, 이메일 발송, 알림 전송 등을 Kafka 토픽으로 처리
    • 소비자(Consumer)가 여러 개 있어도 동일한 메시지 분산 처리 가능

사용 기술: Kafka Consumer Group, Partitioning

 

7-4. 로그 수집 및 모니터링 시스템

목적: 대규모 로그를 중앙화하여 실시간 모니터링, 분석 가능
상세 사례:

  • ELK 스택과 연동
    • Kafka → Logstash → Elasticsearch → Kibana
    • 대규모 로그를 실시간 수집, 색인, 시각화
  • 시스템 상태 모니터링
    • 서버 상태, 애플리케이션 메트릭, 장애 알림을 Kafka로 수집
    • Prometheus/Grafana와 연동하여 실시간 대시보드 구성

사용 기술: Kafka Connect, Beats, ELK, Grafana

 

7-5. 데이터 통합 및 ETL

목적: 서로 다른 시스템의 데이터를 통합하여 데이터 웨어하우스로 전달
상세 사례:

  • OLTP → OLAP 실시간 ETL
    • MySQL, PostgreSQL 등 DB에서 변경 데이터(CDC)를 Kafka로 스트리밍
    • Kafka Connect → 데이터 웨어하우스(AWS Redshift, Snowflake 등)
    • 장점: 실시간 분석, 배치 ETL 필요 없음
  • 다양한 DB/시스템 동기화
    • 금융, 물류 시스템 간 실시간 데이터 동기화
    • 예: 주문/재고 정보, 배송 상태 실시간 반영

사용 기술: Kafka Connect, Debezium(CDC), Kafka Streams

 

7-6. 추천 및 개인화 서비스

 

목적: 실시간 사용자 행동 기반 추천, 개인화 콘텐츠 제공
상세 사례:

  • 온라인 쇼핑몰 추천 시스템
    • 사용자가 본 상품, 장바구니, 검색 기록을 Kafka 토픽으로 수집
    • 실시간 추천 엔진에서 분석 후 추천 상품 제공
  • 뉴스/콘텐츠 플랫폼
    • 유저 클릭/조회 데이터를 Kafka로 수집
    • Kafka Streams로 인기 콘텐츠, 개인화 뉴스 추천

사용 기술: Kafka Streams, Flink, ML 모델 연동

8. 사례별 구체적 기업 활용

기업 활용 사례
LinkedIn Kafka 자체 개발, 실시간 뉴스피드, 이벤트 수집 및 분석
Netflix 실시간 스트리밍 데이터 파이프라인, 서비스 메트릭 처리
Uber 실시간 위치, 승차/요금 데이터 수집 및 분석
Airbnb 실시간 사용자 이벤트 처리 및 추천 시스템
Pinterest 광고 이벤트 처리 및 로그 수집

9. License

9-1. Apache License 2.0 주요 내용

  • 무료 사용: 상업적, 비상업적 구분 없이 누구나 사용 가능.
  • 소스 코드 수정 가능: Kafka 소스 코드를 수정하거나 확장하여 자체 프로젝트에 포함 가능.
  • 배포 가능: 수정한 코드나 원본을 재배포 가능. 단, 아래 조건 준수 필요.
  • 저작권 표시 유지: 재배포 시 원본 저작권 표시 및 라이선스 사본 포함.
  • 특허권 부여: 기여자에게서 특허 사용 권한을 포함.
  • 상표권 제한: Apache 로고나 이름은 별도의 허가 없이 사용 불가.

9-2. 실무에서 주의할 점

  • Kafka를 사용한 애플리케이션을 상용 배포할 때, 라이선스 자체는 자유지만 **“Apache” 상표 사용”**은 제한됨.
  • Kafka를 수정한 경우, 수정한 코드에 대한 저작권 및 라이선스 표시 필요.
  • GPL과 달리 카피레프트 의무 없음: 수정 후 코드를 공개할 필요 없음.

+ Recent posts