Kafka

[실전 카프카 개발부터 운영까지] 1. 카프카 개요

noahkim_ 2025. 5. 2. 18:24

고승범 님의 "실전 카프카 개발부터 운영까지" 책을 정리한 포스팅 입니다.

 

0. 배경

  • 링크드인 내부에서 발생하고 있는 이슈들을 해결하기 위해 만들었음
문제 설명
데이터 폭증 유저 증가로 데이터도 폭발적으로 증가 (기존 시스템으로는 감당 불가)
이기종 간 연결 호환 안됨
서로 다른 시스템/서비스 간 데이터 통신을 위해 복잡한 코드가 필요
실시간 반영 어려움
사용자 변경 사항을 빠르게 다른 시스템에 반영하기 어려움

➡️ 이를 해결하기 위해 "Kafka" 개발

 

Kafka

  • 고성능 대용량 실시간 데이터 스트리밍 플랫폼
  • 어디선가 생긴 데이터를 여러 시스템에 실시간으로 빠르고 정확하게 보내줌

 

링크드인 실제 예시

뉴스피드 서비스
  • 누군가 직장 정보를 변경하면 그 내용이 지인 뉴스피드에 즉시 뜨는 서비스
  • ➡️ 추천 시스템에도 즉시 반영
  • ➡️ 실시간 직장 추천이 가능해짐

 

1. 잘란도와 트위터의 카프카 도입 사례

유럽 최대 온라인 패션몰 잘란도의 도전 사례

문제 상황
  • 회사의 규모가 커지고 사업도 다각화됨
  • 요구사항도 다양해짐
  • ➡️ 비즈니스 확장에 발맞춰 디지털 플랫폼으로 변화함 (온라인 쇼핑몰 증설)
  • ➡️ 데이터 양이 폭발적으로 증가함

 

초기 대응: 이벤트 드리븐 시스템
  • 데이터가 바뀌면 그걸 실시간으로 알려주는 시스템
  • 데이터의 변화가 컨슈머 측에 스트림으로 전달됨
  • ⚠️ 정합성 검증 작업 필수
항목 설명
데이터 정합성
인바운드 데이터와 아웃바운드 데이터가 동일해야 함
➡️ 검증 추가
데이터 파이프라인에 검증 작업을 추가하여 데이터 정합성 유지를 시도함
 검증 작업이 많아져 검증 피로도가 높아짐.
➡️ 프로토콜 선택
데이터 정합성을 효율적으로 획득하기 위해 도입함
- RDB에 데이터 갱신 후 아웃바운드 이벤트를 발행하였음 (동기화 방식)

✅ 데이터 오차 감소
분산 환경에서의 정합성
 순서 보장
 대용량 고성능

 다양한 클라이언트의 요구사항 지원

 

해결 방법: 카프카
문제 항목 Kafka의 해결 특성 설명
인바운드-아웃바운드 데이터 정합성 ✔ 트랜잭션 처리
✔ Kafka Retry
DB에 먼저 저장 → 커밋 성공 시 Kafka로 이벤트 전송
Kafka 메시지 발행 실패 시 재시도 메커니즘 사용 (Outbox 패턴)
분산 환경에서의 정합성 ✔ Replication
✔ acks 설정 (acks=all)
✔ Schema Registry
브로커 장애 시에도 데이터 보존
모든 복제본에 쓰기 완료 후 전송 성공 처리
중앙 스키마 관리로 포맷 일관성 유지
순서 보장 ✔ 동일 key는 동일 파티션 처리
✔ 파티션 내 순서 보장
컨슈머 그룹 내에서 단일 컨슈머가 해당 파티션 전담
같은 파티션에 들어간 메시지는 순서 보장
대용량 고성능 ✔ Zero-Copy
✔ 비동기 처리
✔ 파티셔닝
✔ 압축 전송/배치 처리
디스크 → 네트워크 직접 전송으로 CPU 절약
Producer-Consumer 분리 (논블로킹 동작)
병렬 처리 구조로 처리량 증가
데이터 전송 효율 극대화
다양한 클라이언트 요구 대응 ✔ 다양한 언어 지원
✔ Kafka Connect
✔ Consumer group
✔ 속도 조절 (Pull 방식)
Java, Python 등 언어별 클라이언트 제공
다양한 외부 시스템과 손쉬운 연동
여러 Consumer group이 하나의 토픽을 독립 소비
각 클라이언트가 자신의 처리 속도에 맞춰 데이터 수신

 

SNS 절대 강자 트위터의 카프카 활용 사례

문제 상황
  • 사용자가 글을 쓰면, 팔로워들에게 즉시 글을 보여줘야 함
  • 뉴스, 광고, 알림 등도 실시간으로 빠르게 보내야 함
  • 이벤트 버스를 구축하였으나 실시간성, 속도, 확장성이 약하였음

 

해결 방법: 카프카
문제 항목 Kafka의 기술적 특성 설명
실시간성 ✔ 비동기 처리 Producer와 Consumer가 독립적으로 작동 → 대기 없이 실시간 전파
고성능 ✔ Zero-Copy 기술
✔ 배치 처리
✔ 디스크 기반 로그 저장
데이터를 메모리→디스크→네트워크로 복사하지 않고 바로 전송
한 번에 여러 메시지를 묶어 전송 → 전송 효율 증가
디스크 기반 로그 저장으로 빠른 읽기/쓰기
확장성 ✔ 파티셔닝
✔ Consumer Group
✔ 수평 확장 지원
하나의 토픽을 여러 파티션으로 나눠 병렬 처리 가능
여러 Consumer가 토픽을 나눠 처리해 부하 분산
브로커, 파티션을 추가해 시스템 전체 확장 용이

 

2. 국내외 카프카 이용 현황

3. 카프카의 주요 특징

항목 특징 설명
데이터
순서 보장
동일한 파티션 내에서 메시지 순서를 유지함
적어도 한 번 전송
누락 없이 최소 1번 이상 전송 보장 (중복은 있을 수 있음)
내구성
메시지를 디스크에 안전하게 저장 (acks 옵션)
로그 컴팩션
오래된 메시지는 요약 저장 → 필요한 핵심 정보만 유지
성능
비동기 방식
Producer와 Consumer가 독립적으로 작동 → 병렬 처리 가능
블로킹 없음
요청/응답 중 대기 없이 바로 처리됨
속도 조절
Consumer가 자기 속도에 맞게 데이터 가져감 (Pull 방식) → 백프레셔 대응
빠른 처리속도
밀리초 단위의 응답 속도 → 실시간 데이터 전송 가능
강력한 파티셔닝
데이터를 여러 파티션에 분산 → 병렬 처리로 처리량 극대화
Zero-Copy 기술
데이터 복사 최소화 → CPU 부담 감소 및 처리 효율 증가
클러스터링 지원
브로커·파티션을 추가해 처리량 수평 확장 → 성능 향상
안정성
고가용성 (Replication)
복제본 유지 → 특정 브로커가 고장 나도 데이터 손실 없음
손쉬운 클러스터 확장
장애 발생 시 다른 브로커가 대체 가능 → 가용성 증가
무중단 업그레이드
서비스 중단 없이 Kafka 버전 업 가능
유지 보수
느슨한 결합 구조
Producer와 Consumer가 유연하게 연결됨 → 기능 변경/확장 쉬움
Kafka Connect 지원
외부 시스템과 쉽게 연동 가능 (DB, Elasticsearch 등)
스키마 레지스트리
데이터 포맷을 중앙에서 관리 가능
운영 도구 제공
다양한 관리 도구 활용 가능 (모니터링, 설정 등)
편의성
구성 유연성
원하는 데이터 구조로 토픽/파티션 설계 가능
모듈식 설계
각 모듈들은 독립적 → 필요에 따라 조립하듯 사용 가능
풍부한 에코시스템
다양한 확장 도구 존재 (Kafka Streams, ksqlDB 등)

 

4. 카프카의 성장

5. 다양한 카프카의 사용 사례

넷플릭스

문제 상황
  • 전 세계에서 수많은 데이터를 끊임없이 수집 (시청 기록, 검색, 클릭 등)
  • 단순히 데이터 수집뿐만 아니라 분석, 통계, 처리, 저장까지 이어지는 복잡한 파이프라인이 필요함
  • 이 파이프라인이 끊기지 않고 흐르도록 만드는 것이 중요했음

 

kafka 역할
  • 이 모든 시스템을 서로 연결하는 중심 허브 역할을 함
  • 즉, 데이터 흐름을 실시간으로 연결해줌 

 

kafka 처리 흐름

  1. produce: Kafka는 데이터를 필요한 시스템에 보냄
  2. consume: 각 시스템은 전달받은 데이터를 처리함
  3. produce: 처리된 데이터를 다시 Kafka에 보냄

 

Kafka 효과
구분 내용
실시간 분석
사용자 행동을 실시간으로 분석할 수 있음
실시간 장애 대응
문제가 발생하면 즉시 감지함
낮은 결합도
각 서비스가 독립적으로 움직여서 유지보수가 쉬움
빠르고 안정적인 전송
데이터 손실 없이, 밀리초 단위로 빠르게 전달

 

우버

문제 상황
  • 새로운 데이터 파이프라인을 추가할 때마다 이기종 간의 호환성 확인 및 데이터 정합성 확인을 필수적으로 해야 했음
  • 시간도 오래걸리고 복잡했음

 

kafka 효과

  • 정합성 자동 보장 (트랜잭션, Exactly-once 등)
  • 호환성 지원
  • ➡️ 더 빠르고 쉽게 추가할 수 있게 됨

 

출처