전체 그래프
Kafka

Kafka Partition

data-engineeringtool/kafkaconcept/partition

상위: Kafka

요약

Partition은 Topic을 물리적으로 나누는 단위로, 병렬 처리와 확장성을 제공합니다. 각 파티션은 순서가 보장되는 불변(immutable) 메시지 시퀀스입니다.

Partition의 역할

병렬 처리

  • 여러 파티션에 메시지를 분산 저장
  • 각 파티션은 독립적으로 처리 가능
  • Consumer Group의 여러 Consumer가 동시에 처리

확장성

  • 파티션 수를 늘려 처리량 증가
  • 브로커 간 파티션 분산으로 부하 분산
  • 수평적 확장(Scale-out) 가능

Partition 구조

Offset

  • 파티션 내 메시지의 고유 ID (숫자)
  • 0부터 시작하여 순차적으로 증가
  • 파티션 내에서만 순서 보장

Kafka Partition

Kafka Partition

Segment 파일

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

Kafka Partition

파일 구조

저장 위치

# config/server.properties
log.dirs=/var/lib/kafka/data

파일 타입

파일 확장자설명
.log실제 메시지 데이터
.indexOffset → 파일 위치 매핑
.timeindex타임스탬프 기반 인덱스

Kafka Partition

순서 보장

파티션 내 순서 보장

  • 같은 파티션 내 메시지는 순서 보장
  • Producer가 전송한 순서대로 저장
  • Consumer가 읽는 순서도 동일

파티션 간 순서 미보장

  • 서로 다른 파티션 간에는 순서 보장 안 됨
  • 순서가 중요한 경우: 같은 Key로 전송하여 동일 파티션에 저장

Kafka Partition

파티션 설정

파티션 수 결정 기준

  1. 처리량: 높은 처리량 필요 시 파티션 수 증가
  2. Consumer 수: Consumer 수만큼 파티션 필요
  3. 브로커 수: 브로커 수의 배수로 설정 권장
  4. 순서 보장: 순서 중요 시 파티션 수 최소화

파티션 수 변경

# 파티션 증가 (축소 불가)
kafka-topics.sh --alter --topic my-topic \
--partitions 6 --bootstrap-server localhost:9092

주의사항

  • 파티션 수는 증가만 가능, 감소 불가
  • 파티션 수 변경 시 Key 기반 파티셔닝에 영향
  • 너무 많은 파티션은 오버헤드 증가