들어가기 앞서
이번 포스팅에서는 카프카에 대해 알아볼 예정입니다. 이전까지 RabbitMQ에 대해 공부하였고, 앞으로 Kafka에 대해 공부하며 두 기술의 차이점에 대해 알아볼 예정입니다.
Kafka에 대한 공부는 "아파치 카프카 애플리케이션 프로그래밍 with 자바" 라는 책으로 공부할 예정입니다. 그래서 아마 포스팅의 방향이 책 내용의 요약과 실습해본 결과를 위주로 작성할 것 같습니다.
해당 책은 데브원영님께서 작성하였습니다. 책의 저자 이신걸 알고 책을 고른 것은 아니며, 데브원영님은 유명 빅테크 기업 기술 세미나에서 Kafka를 강연하시고 유튜브나 인프런 등에서 카프카와 관련하여 교육 영상이 많으신데, 처음 책을 읽으려고 보니 이름이 익숙하여 알게 되었습니다. 따로 궁굼하신 분들은 해당 유튜브 영상과 인프런 강의도 참고하시면 좋을것 같습니다.
https://www.yes24.com/product/goods/99122569
아파치 카프카 애플리케이션 프로그래밍 with 자바 - 예스24
아파치 카프카 애플리케이션 개발을 위한 「실전 가이드」아파치 카프카란 무엇일까? 카프카 애플리케이션은 어떻게 만들까? 데이터 파이프라인을 만들기 위해 어떤 카프카 라이브러리를 사용
www.yes24.com
카프카에 대해 깊은 내용이 궁금하신다면, 아래 글을 추천드립니다.
카프카(kafka)에 대해 알아보자 - (1) 카프카의 기본 개념 (브로커, 토픽, 파티션, 레코드)
카프카(kafka)에 대해 알아보자 - (2) 카프카의 기본 개념 (프로듀서, 컨슈머)
카프카(kafka)에 대해 알아보자 - (4) 카프카 딥다이브 (토픽, 파티션)
카프카(kafka)에 대해 알아보자 - (5) 카프카 딥다이브 (프로듀서, 컨슈머)
Kafka란 무엇인가?
Kafka는 LinkedIn이 복잡해진 백엔드 아키텍처와 데이터 흐름 문제를 해결하기 위해 개발한 고성능 분산 메시징 시스템이다. 초기 LinkedIn은 애플리케이션 간 1:1 통신 구조를 통해 데이터를 주고받았다. 하지만 시간이 지나며 애플리케이션이 증가하고 시스템이 복잡해지자, 각 애플리케이션 간의 직접적인 연동 방식은 유지보수와 장애 대응에 큰 어려움을 초래했다.

애플리케이션 간 의존도가 높아지면 한쪽 시스템의 장애가 다른 시스템으로 전파되기 쉬워진다. 이러한 문제를 해결하기 위해 Kafka는 데이터를 중앙에서 수집하고 분배하는 허브 역할을 하도록 설계되었다. 소스 애플리케이션은 데이터를 Kafka로만 전송하면 되고, 타겟 애플리케이션은 Kafka로부터 필요한 데이터를 구독해 처리한다. 이를 통해 서로 간의 의존성을 최소화하고 시스템의 유연성과 안정성을 확보할 수 있다.

Kafka의 핵심 구성 요소
- Producer: Kafka로 데이터를 전송하는 역할
- Broker: Kafka 클러스터를 구성하는 서버 단위, 데이터를 저장하고 분배함
- Topic: 데이터가 저장되는 단위이며, 여러 개의 Partition으로 구성됨
- Partition: 데이터를 병렬로 처리할 수 있도록 나누어진 구조. 내부는 FIFO처럼 동작
- Consumer: Kafka에서 데이터를 구독하고 처리하는 클라이언트

Kafka의 주요 특징
1. 높은 처리량
Kafka는 데이터를 묶음(Batch) 단위로 처리하여 네트워크 호출 횟수를 줄이고, 처리량을 극대화한다. 또한 Partition 기반의 병렬 처리 구조를 통해 컨슈머 수를 늘리면 그만큼 더 많은 데이터를 동시에 처리할 수 있어 대용량 데이터 처리에 매우 적합하다.
2. 뛰어난 확장성
Kafka는 브로커와 파티션을 쉽게 확장 가능하도록 설계되어 있다. 데이터량이 증가하면 브로커를 추가하거나 파티션을 늘려 자연스럽게 스케일 아웃이 가능하며, 반대로 스케일 인으로 줄일 수도 있다.
3. 영속성 (Durability)
Kafka는 다른 메시징 플랫폼들(ex) RabbitMQ)과 다르게 데이터를 메모리에 저장하는 대신 파일 시스템에 직접 저장한다. 하지만 일반적인 디스크 I/O 성능 저하 문제를 해결하기 위해 페이지 캐시 영역을 메모리로 활용해, 처리 속도 또한 확보한다. 이 구조 덕분에 시스템 장애 발생 시에도 데이터 유실 없이 복구가 가능하다.
4. 고가용성 (High Availability)
Kafka는 복제(replication)를 통해 고가용성을 보장한다. 하나의 브로커에 문제가 생기더라도, 동일 데이터를 저장하고 있는 다른 브로커가 지속적으로 서비스를 이어받을 수 있다. 운영 환경에서는 3대 이상의 브로커 구성이 권장되며, 안정성을 위해 min.insync.replicas 옵션을 2 이상으로 설정하는 것이 일반적이다.
안정적인 운영을 위한 Kafka 클러스터 구성 팁
Kafka 클러스터는 최소 3대 이상의 브로커로 운영하는 것이 안전하다.
- 1대 브로커: 장애 발생 시 복구 불가
- 2대 브로커: 장애 발생 시 운영 가능하나, 복제 지연에 따른 데이터 유실 가능성 존재
- 3대 이상 브로커: min.insync.replicas=2 설정 가능, 안정적인 데이터 복제 및 처리 가능
Kafka는 브로커 간 데이터 복제를 통해 일부 노드에 장애가 발생해도 지속적으로 메시지를 저장하고 전송할 수 있어, 무중단 운영이 가능한 고신뢰 데이터 파이프라인 플랫폼이다.
'Kafka, RabbitMQ' 카테고리의 다른 글
| 카프카(kafka)에 대해 알아보자 - (2) 카프카의 기본 개념 (프로듀서, 컨슈머) (0) | 2025.05.27 |
|---|---|
| 카프카(kafka)에 대해 알아보자 - (1) 카프카의 기본 개념 (브로커, 토픽, 파티션, 레코드) (0) | 2025.05.23 |
| RabbitMQ에 대해 알아보자 - (12) Producer 트랜잭션 전략 (0) | 2025.05.20 |
| RabbitMQ에 대해 알아보자 - (11) 트랜잭션 전략 / 신뢰성 있는 메시지 (0) | 2025.05.08 |
| RabbitMQ에 대해 알아보자 - (10) Header 기반 라우팅 / Headers Exchange 전략 (0) | 2025.05.08 |