고승범 님의 "실전 카프카 개발부터 운영까지" 책을 정리한 포스팅 입니다.
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 처리 흐름
- produce: Kafka는 데이터를 필요한 시스템에 보냄
- consume: 각 시스템은 전달받은 데이터를 처리함
- produce: 처리된 데이터를 다시 Kafka에 보냄
Kafka 효과
구분 | 내용 |
실시간 분석 |
사용자 행동을 실시간으로 분석할 수 있음
|
실시간 장애 대응 |
문제가 발생하면 즉시 감지함
|
낮은 결합도 |
각 서비스가 독립적으로 움직여서 유지보수가 쉬움
|
빠르고 안정적인 전송 |
데이터 손실 없이, 밀리초 단위로 빠르게 전달
|
우버
문제 상황
- 새로운 데이터 파이프라인을 추가할 때마다 이기종 간의 호환성 확인 및 데이터 정합성 확인을 필수적으로 해야 했음
- 시간도 오래걸리고 복잡했음
kafka 효과
- 정합성 자동 보장 (트랜잭션, Exactly-once 등)
- 호환성 지원
- ➡️ 더 빠르고 쉽게 추가할 수 있게 됨
출처
- Netflix Tech Blog - Evolution of the Netflix Data Pipeline
- Uber Blog - uReplicator: Uber Engineering’s Robust Apache Kafka Replicator
'Kafka' 카테고리의 다른 글
[실전 카프카 개발부터 운영까지] 6. 컨슈머의 내부 동작 원리와 구현 (0) | 2025.05.08 |
---|---|
[실전 카프카 개발부터 운영까지] 5. 프로듀서의 내부 동작 원리와 구현 (0) | 2025.05.07 |
[실전 카프카 개발부터 운영까지] 4. 카프카의 내부 동작 원리와 구현 (0) | 2025.05.06 |
[실전 카프카 개발부터 운영까지] 3. 카프카 기본 개념과 구조 (0) | 2025.05.03 |