forked from MinePing/Final
-
Notifications
You must be signed in to change notification settings - Fork 0
library kafka
qbsb147 edited this page Mar 21, 2026
·
1 revision
Kafka는 이벤트 기반(Event-Oriented) 분산 스트리밍 플랫폼이다.
- 이벤트(메시지)를 중심으로 데이터 흐름 구성
- 대량의 데이터를 실시간으로 수집 / 처리 / 전달
- Pub/Sub 모델 기반 메시징 시스템
- 시스템이 이벤트를 기준으로 동작
- 데이터 변경, 주문 발생 등 모든 것이 이벤트
- Producer → Topic에 메시지 발행
- Consumer → Topic 구독 후 메시지 소비
👉 특징
- 하나의 메시지를 여러 Consumer Group이 동시에 소비 가능
- 서비스 간 결합도 낮음
👉 예
- 주문 이벤트 발생
- 주문 서비스 → 주문 처리
- 알림 서비스 → 알림 전송
- 분석 서비스 → 데이터 분석
- MQ: 메시지 1개 → Consumer 1개 처리 후 삭제
- Kafka: 메시지 유지 + 여러 Consumer Group이 독립적으로 소비
- 여러 Broker로 구성된 클러스터
- 데이터 분산 저장 및 처리
- Broker 추가로 수평 확장 가능
- Partition 기반 병렬 처리 지원
- 여러 Broker로 구성된 Kafka 전체 시스템
- Kafka 서버
- 메시지를 저장하고 전달하는 역할
- Kafka에서 처리되는 데이터 단위
구성:
- Key
- Value
- Timestamp
- 데이터를 생성하여 Topic에 발행
- Topic에서 데이터를 읽어 처리
👉 Consumer들의 논리적 묶음
- 같은 Group → Partition을 나눠 처리 (병렬 처리)
- 다른 Group → 동일 메시지를 각각 소비
- 메시지를 구분하는 카테고리
👉 Topic을 물리적으로 나눈 단위
- 병렬 처리 가능
- 여러 Broker에 분산 저장
- Partition 내부 → 순서 보장
- Partition 간 → 순서 보장 안됨
👉 메시지의 순번 (위치)
- Consumer는 Offset 기준으로 읽음
- 어디까지 읽었는지 추적 가능
Producer → Topic → Partition(0,1,2)
Consumer Group A (주문 처리)
- Partition 0 → Consumer 1
- Partition 1 → Consumer 2
- Partition 2 → Consumer 3
Consumer Group B (알림 서비스)
- 동일한 메시지를 별도로 소비
👉 핵심
- Group이 다르면 메시지를 각각 소비
- 같은 Group 내부에서는 Partition 기준 분산 처리
Kafka는 가용성을 위해 Partition을 복제한다.
-
Leader Partition
- 실제 읽기/쓰기 담당
-
Follower Partition
- Leader를 복제
👉 Leader와 동기화된 Replica 집합
- Leader 장애 시 ISR에 있는 Replica만 승격 가능
- 데이터 정합성 보장
- Broker 중 하나가 담당
- Partition 리더 할당 및 상태 관리
(※ 최신 Kafka에서는 제거되는 방향이지만, 기존 구조 기준 설명)
- Broker 메타데이터 관리
- Controller 선출
- Partition 단위로 병렬 처리 가능
- Consumer 수 ≤ Partition 수
👉 주의
- Consumer > Partition → 일부 Consumer는 idle 상태
- 무작정 늘리면 리소스 낭비
- 같은 Partition 내에서만 보장
- 메시지는 바로 삭제되지 않음
- 일정 기간 유지 후 삭제 또는 압축
Kafka는 재처리를 지원하지만 설정에 따라 문제가 발생할 수 있다.
- Offset을 먼저 commit
- 이후 처리 실패
👉 결과
- 메시지가 처리된 것으로 간주 → 유실
- 수동 commit
- 예외 처리 로직 구현
- Producer / Consumer 구현 라이브러리
외부 시스템과 데이터 연동
- Source Connector → 외부 → Kafka
- Sink Connector → Kafka → 외부
👉 ETL 용도
- 실시간 데이터 처리 API
- 변환, 필터링, 집계 가능
- Kafka 클러스터 간 데이터 복제
- DR(재해 복구) 용도
- SQL 기반 스트림 처리
- 실시간 데이터 분석 가능