티스토리 뷰

728x90

 

 

요약 — 토픽·파티션은 카프카 확장성의 핵심

카프카에서 토픽은 이벤트 스트림의 “카테고리”, 파티션은 해당 토픽을 여러 샤드로 잘라 브로커 전체에 분산-저장하는 단위입니다. 파티션이 많아질수록 병렬 처리량·스루풋·내구성이 상승하지만, 리밸런싱·메타데이터·메모리 오버헤드도 함께 증가하므로 적정 개수를 잡는 전략이 필요합니다. 업계에서는 “브로커 × 복제계수 × 100” 이하, 혹은 한 브로커당 1 ~ 4 천 파티션을 실무 상한선으로 권장합니다.


1. 토픽과 파티션의 기본 개념

1.1 토픽(Topic)

  • 프로듀서가 메시지를 발행(Publish) 하고 컨슈머가 구독(Subscribe) 하는 논리적 채널.
  • 메시지는 토픽 내부에서 파티션 단위로만 저장·전송됩니다.

1.2 파티션(Partition)

  • 순차 로그 파일(commit-log)이며, 각 파티션 안에서는 메시지 순서가 보장됩니다.
  • 동일 토픽의 파티션들은 여러 브로커에 복제되어 장애-내성을 확보합니다.

1.3 왜 중요한가?

  1. 수평 확장(Throughput) – 파티션이 많을수록 프로듀서·컨슈머가 병렬로 작업할 수 있어 초당 처리량이 선형 증가합니다. 
  2. 순서 보장 범위 – 파티션 내부는 절대 순서가 유지되지만 파티션 간에는 그렇지 않습니다. 키별 순서가 필요하다면 같은 키를 동일 파티션으로 보내야 합니다.
  3. 대용량 저장 – 여러 머신에 걸쳐 토픽 용량을 확장해 한 노드 디스크 한계를 넘길 수 있습니다.

2. 파티션 수 결정 전략

고려 항목 가이드라인 근거·사례

트래픽(TPS) “초당 레코드 수 ÷ 1,000 ≈ 파티션” 을 시작점으로, 모니터링 후 조정
브로커 자원 브로커 당 100 × B × R 이하(B=브로커 수, R=복제계수)
AWS MSK m5.large 기준 리더+팔로워 합 1,000/브로커 권장
지연 · 메타데이터 1만 + 파티션 클러스터는 컨트롤러 페일오버 시 수 십 초 지연 발생
리밸런스 비용 신규 파티션 추가 시 컨슈머 그룹 리밸런스·캐시 invalidation 발생 → 단계적 증설
메모리 프로듀서·컨슈머는 파티션별 버퍼를 잡으므로 batch.size × 파티션수 만큼 JVM 힙 필요

Tip : 과소보다 과대가 문제입니다. 파티션은 증설은 가능하지만 감소는 불가하므로(deleteRecords 불가), 처음에는 적당히 작게 시작 후 모니터링-증설이 안전합니다. 


3. 데이터 분산과 병렬 처리 메커니즘

3.1 프로듀서-사이드 파티셔닝

  • 기본 파티셔너는 (key.hashCode() % partitionCount) 규칙으로 키 기반 라우팅을 수행해 동일 키 순서를 보존합니다.
  • 키가 null이면 라운드로빈 또는 스티키 파티셔너가 균등 분산을 시도합니다. 

3.2 컨슈머 그룹 병렬성

  • 파티션 ≤ 컨슈머 수: 일부 컨슈머는 놀 수 있음
  • 파티션 ≥ 컨슈머 수: 각 컨슈머가 1 이상 파티션을 전담 → 최대 병렬 처리량 실현
  • 컨슈머 증설·감소·파티션 증설 이벤트마다 리밸런스가 발생하여 파티션이 재배치됩니다. 

3.3 부하-편향(스큐) 방지

  • “솟아오르는 키” 트래픽이 특정 파티션에 몰리면 리더 CPU · 디스크가 포화 → 라운드로빈·스티키 파티셔너나 커스텀 파티셔너로 완화합니다. 

4. 실무 설계 체크리스트

  1. 예상 TPS, 메시지 크기, 보존기간 → 필요한 디스크·네트워크 산출 후 파티션 수 역산.
  2. 컨슈머 그룹 병렬도 = 파티션 수 상한. 예) 20 개 서비스 인스턴스로 읽으면 최소 20 개 파티션 필요. 
  3. 브로커당 파티션 한도 검토 (instanceTypeㆍ메모리 사양 기준). 
  4. 장기적으로 KRaft + Tiered Storage 를 사용한다면 메타데이터 스케일링이 개선돼 파티션 수 한도가 완화됩니다. 
  5. 증설 시 kafka-reassign-partitions.sh 로 점진 배포, 한 번에 20 파티션 이하 이동 권장. 

5. 결론

토픽과 파티션 설계는 카프카 클러스터 성능·신뢰성·운영 난이도를 좌우합니다. “파티션은 많을수록 좋다” 는 단순 공식 대신, 업무 TPS·컨슈머 병렬도·브로커 스펙을 기준으로 점진 증설 전략을 택하세요. 키 기반 파티셔닝과 컨슈머 그룹 구성을 적절히 조합하면 선형 확장순서 보장을 모두 달성할 수 있습니다.

다음 단계 — 프로듀서의 Idempotence·압축·배치, 컨슈머의 Co-operative Sticky 리밸런스 등을 최적화해 파티션 활용도를 극대화해 보세요. 즐거운 스트리밍 여정이 되시길 바랍니다!

 

 

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함