상위: Kafka
요약
Partition은 Topic을 물리적으로 나누는 단위로, 병렬 처리와 확장성을 제공합니다. 각 파티션은 순서가 보장되는 불변(immutable) 메시지 시퀀스입니다.
Partition의 역할
병렬 처리
- 여러 파티션에 메시지를 분산 저장
- 각 파티션은 독립적으로 처리 가능
- Consumer Group의 여러 Consumer가 동시에 처리
확장성
- 파티션 수를 늘려 처리량 증가
- 브로커 간 파티션 분산으로 부하 분산
- 수평적 확장(Scale-out) 가능
Partition 구조
Offset
- 파티션 내 메시지의 고유 ID (숫자)
- 0부터 시작하여 순차적으로 증가
- 파티션 내에서만 순서 보장


Segment 파일
- 파티션은 여러 Segment 파일로 구성
- 일정 크기 또는 시간 단위로 새 Segment 생성
- 파일명은 시작 Offset 기준

파일 구조
저장 위치
# config/server.properties
log.dirs=/var/lib/kafka/data
파일 타입
| 파일 확장자 | 설명 |
|---|---|
.log | 실제 메시지 데이터 |
.index | Offset → 파일 위치 매핑 |
.timeindex | 타임스탬프 기반 인덱스 |

순서 보장
파티션 내 순서 보장
- 같은 파티션 내 메시지는 순서 보장
- Producer가 전송한 순서대로 저장
- Consumer가 읽는 순서도 동일
파티션 간 순서 미보장
- 서로 다른 파티션 간에는 순서 보장 안 됨
- 순서가 중요한 경우: 같은 Key로 전송하여 동일 파티션에 저장

파티션 설정
파티션 수 결정 기준
- 처리량: 높은 처리량 필요 시 파티션 수 증가
- Consumer 수: Consumer 수만큼 파티션 필요
- 브로커 수: 브로커 수의 배수로 설정 권장
- 순서 보장: 순서 중요 시 파티션 수 최소화
파티션 수 변경
# 파티션 증가 (축소 불가)
kafka-topics.sh --alter --topic my-topic \
--partitions 6 --bootstrap-server localhost:9092
주의사항
- 파티션 수는 증가만 가능, 감소 불가
- 파티션 수 변경 시 Key 기반 파티셔닝에 영향
- 너무 많은 파티션은 오버헤드 증가