쏭의 개발 블로그
Kafka와 대규모 데이터 처리 본문
[1] Kafka란?
실시간으로 스트리밍 데이터를 수집하고 처리하는 데 최적화된 분산 이벤트 스트리밍 플랫폼
- 대규모 데이터를 실시간으로 처리
- 여러 서비스 간에 대규모 이벤트를 생산 및 소비하며 통신
특징
- 고성능, 확장성, 내구성, 가용성
Producer와 Consumer
- Producer : 데이터 생산자
- Kafka로 데이터를 보내는 클라이언트로, 데이터를 Topic단위로 생산하고 전송한다
- Consumer : 데이터 소비자
- Kafka에서 데이터를 읽는 클라이언트로, 데이터를 Topic 단위로 소비하고 처리한다.
- Producer→Consumer로 데이터를 전송한다 (API, Message Queue)
[2] 대규모 데이터 처리를 위한 구조
(1) 기본 구조 : API 통신
직접 통신하는 방법으로, 요청/응답의 구조
- 동기적인 방식이다.
장점
- 단순하고 간단하여 이해하기 쉽다
문제점
- Consumer에 장애가 발생할 경우,
- Producer는 Consumer를 직접 호출하기 때문에 장애가 전파될 수도 있다
- Consumer에 요청이 전달되지 않는다면, 데이터 유실 가능성이 있다.
- 확장성 제한 사항
- 각 요청에 즉각적인 리소스와 동기적 처리가 필요하므로 부하가 높은 시나리오에서는 확장이 어려울 수 있다.
- 오류 처리
- consumer는 메시지 큐와 같은 내장 메커니즘 없이 실패와 재시도를 처리해야함
사용
- 단순성과 동기식 통신
- 대규모 처리에는 부적합하다.
(2) Message Queue
데이터의 생산자와 소비자간 비동기적 통신을 가능하게 하는 시스템
- Producer와 Consumer 사이의 데이터 전송을 Message Queue에 위임한다.
- 분산 환경에서 시스템 간 데이터를 교환하기 위해 사용되는 통신 기법이다.
- 메시지는 큐에 저장되며, 소비자는 필요할 때 이 메시지를 읽어들여 처리한다.
장점
- Producer와 Consumer가 직접적으로 결합되지 않음
- 장애 전파 위험이 감소
- 데이터 유실 위험을 낮출 수 있다
- 데이터에 대한 처리를 비동기로 수행 가능
- 확장성이 좋음
- 생산자에게 영향을 주지 않고 새로운 소비자를 추가하여 증가된 부하를 처리할 수 있어 수평적 확장이 쉽다.
- 이벤트 기반 아키텍처로 실시간으로 이벤트에 대응할 수 있으므로 응답성이 뛰어나다.
단점
- 시스템 아키텍처가 복잡하다.
- 큐이기 때문에 사용자가 많아지거나 데이터가 많아지면 요청에 대한 응답이 늦어지게 됨
(3) Message Broker로의 확장
Producer로부터 전달받은 메시지를 Consumer로 전달해주는 중간 역할이며 응용 소프트웨어 간에 메시지를 교환할 수 있게 한다
- 단일 Message Queue의 한계를 극복
- Producer와 Consumer가 많아질때
- 처리해야할 데이터가 늘어날때
- Message Queue에 장애가 발생할 때
- 데이터에 대해 복잡한 라우팅이 필요할때
- Producer가 데이터를 생산(publish)하면 Consumer는 데이터를 구독(subscribe)해서 가져오는 방식이다 : pub/sub 패턴
- Consumer가 Message Broker에서 데이터를 pull해오는 방식으로 Consumer가 자신의 처리량에 따라 조절 가능하다
[3] Kafka 구조
(1) Kafka Broker
- Kafka에서 데이터를 중개 및 처리해주는 애플리케이션 실행 단위
- Producer와 Consumer 사이에서 데이터를 주고 받는 역할
- topic 단위로 데이터 생산/소비
(2) Kafka Cluster
- 여러개의 Broker가 모여서 하나의 분산형 시스템을 구성한 것
- 대규모 데이터에 대해 고성능, 안전성, 확장성, 고가용성 등을 지원(데이터의 복제, 분산 처리, 장애 복구 등)
사용하는 이유
- 단일 Broker는 처리량에 한계가 있음
- 여러 대 Broker를 묶어 Cluster를 구성해 처리량과 안정성 증가
- Topic의 데이터를 여러 Broker에 나누어 저장하고 병렬로 처리 가능
(3) Topic과 Partition 구조
Topic
- Kafka에서 데이터의 논리적인 구분 단위
- 여러 Broker에 걸쳐 병렬 처리 가능
Partition
- Topic이 물리적으로 분산되는 단위
- 한 Topic은 여러 Partition으로 나뉨
- Partition 단위로 데이터가 저장되고 처리됨
- 특징
- 각 Partition은 연속적(순차적)으로 데이터 기록
- Partition 간에는 데이터 순서 보장되지 않음
- 여러 Broker에 분산되어 저장 및 병렬 처리됨
- Partition 수가 많을수록 처리량과 확장성 증가
스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판 강의 - 수강 전 문의 | 인프런
수강 전 궁금한 점이 있다면? 인프런 수강 전 문의하기를 활용해 궁금한 내용을 해결할 수 있어요! - 수강 전 문의 | 인프런
www.inflearn.com
'Back-end' 카테고리의 다른 글
Transactional Outbox와 Transaction Log Tailing의 비교와 도입 사례 (0) | 2025.06.22 |
---|---|
AWS S3/Wasabi 환경 구축 및 파일 저장 구현(Spring) (4) | 2025.06.15 |
JWT란 무엇인가? (+JWT 인증) (0) | 2025.04.05 |
Soft Delete(논리 삭제)와 Hard Delete(물리 삭제) (0) | 2025.03.08 |
OAuth 2.0 (0) | 2025.02.23 |