JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

[실습] Spring Boot로 여러 개의 파티션에 메시지가 골고루 들어가는 지 확인해보기

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
Kafka
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Kafka 입문
slug
practice-balanced-partition-message-flow
type
post
updatedAt
Dec 6, 2025 05:39 AM

✅ 여러 개의 파티션에 메시지가 골고루 들어가는 지 확인해보기

notion image
이전 강의에서 특정 토픽에 메시지를 넣으면 여러 파티션에 메시지가 적절하게 분산된다고 했다. 이 때, 메시지의 형태에 따라 파티션에 분배되는 방식이 달라진다.
 
  1. key가 포함되지 않은 메시지를 넣을 경우
    1. 스티키 파티셔닝(배치 단위로 처리하기 위해 하나의 파티션에 메시지가 일정량이 채워져야만 그 다음 파티션에 메시지를 저장) 방식으로 메시지를 분배한다.
      ** Kafka 2.4 Ver 이전 : 라운드 로빈 방식(번갈아가면서 차례대로 하나씩 배분하는 방식)으로 메시지를 분배했었다. 하지만 대규모 메시지를 처리할 때는 스티키 파티셔닝 방식이 성능적으로 효율적이었기 때문에 Kafka 2.4 Ver 이후로는 기본 메시지 분배 방식이 라운드 로빈 방식에서 스티키 파티셔닝 방식으로 변경됐다.
       
  1. key가 포함된 메시지를 넣을 경우
    1. key의 해시 값을 기반으로 파티션을 결정해서 메시지를 분배한다. 그래서 같은 key 값을 가진 메시지는 같은 파티션에 들어간다.
      ** 실습에서는 key가 포함되지 않는 메시지만 사용할 예정이다.
 
 

✅ 실습

  1. Consumer, Producer 서버 종료하기
    1. notion image
      notion image
       
  1. 기존 토픽 삭제 후 다시 생성
    1. 토픽에 들어있던 메시지를 전부 삭제하고 깔끔하게 테스트하기 위해 토픽을 삭제하고 다시 생성하자.
      # 토픽 삭제 $ bin/kafka-topics.sh \ --bootstrap-server localhost:9092 \ --delete --topic email.send # 잘 삭제됐는 지 확인하기 $ bin/kafka-topics.sh \ --bootstrap-server localhost:9092 \ --list
       
  1. 토픽 생성하기
    1. 토픽의 파티션이 3개가 생성되도록 토픽을 생성하자.
      # 토픽 생성 (+ 파티션 3개 생성) $ bin/kafka-topics.sh \ --bootstrap-server localhost:9092 \ --create \ --topic email.send \ --partitions 3 # 잘 생성됐는 지 확인 $ bin/kafka-topics.sh \ --bootstrap-server localhost:9092 \ --describe --topic email.send
       
  1. 실시간으로 토픽의 파티션에 저장되는 메시지 확인할 수 있게 셋팅하기
    1. # email.send 토픽의 모든 메시지를 조회 (+ 파티션 정보도 같이 출력) $ bin/kafka-console-consumer.sh \ --bootstrap-server localhost:9092 \ --topic email.send \ --from-beginning \ --property print.partition=true
       
  1. Producer 서버 실행시켜서 API 요청으로 메시지 넣어보기
    1. Producer 서버를 실행시킨 뒤에 API 요청을 연속적으로 여러 번 보내보자.
      notion image
      notion image
      notion image
      요청을 여러 번 보내봐도 하나의 파티션에만 메시지가 저장되는 걸 확인할 수 있다. 이렇게 하나의 파티션에만 몰아져서 메시지가 들어가는 이유가 스티키 파티셔닝 방식(배치 단위로 처리하기 위해 하나의 파티션에 메시지가 일정량이 채워져야만 그 다음 파티션에 메시지를 저장) 때문이다.
       
      스티키 파티셔닝 방식이 대규모의 데이터를 처리할 때는 유리하지만, 작은 규모의 데이터를 처리할 때는 하나의 파티션에만 메시지가 몰리기 때문에 비효율적이다. 따라서 라운드 로빈 방식(번갈아가면서 차례대로 하나씩 배분하는 방식)으로 메시지가 저장되도록 바꿔보자.
       
  1. 라운드 로빈 방식으로 설정 변경
    1. Producer 역할을 하는 Spring Boot 서버의 application.yml 파일을 수정하자.
      application.yml
      spring: kafka: bootstrap-servers: 15.164.96.71:9092 producer: key-serializer: org.apache.kafka.common.serialization.StringSerializer value-serializer: org.apache.kafka.common.serialization.StringSerializer properties: partitioner.class: org.apache.kafka.clients.producer.RoundRobinPartitioner
      수정을 마쳤다면 Producer 서버를 재실행시키자.
       
  1. API 요청 보내보고 로그 확인하기
    1. notion image
      드디어 메시지가 여러 파티션에 골고루 쌓이는 걸 확인할 수 있다.
 
 

✅ 정리

notion image
email.send라는 토픽의 파티션을 3개를 만들고 라운드 로빈 방식으로 메시지가 들어가게 설정했더니, 각 파티션에 메시지가 하나씩 쌓이는 걸 확인할 수 있었다.
 
👨🏻‍🏫
그럼 다음 강의에서는 여러 파티션에 골고루 들어가있는 메시지를, 어떻게 병렬적으로 처리할 수 있는 지 알아보자.
 
author
JSCODE 박재성
category
Kafka
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Kafka 입문
slug
type
series-footer
updatedAt
Dec 6, 2025 05:39 AM
📎
이 글은 실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편) 강의의 수업 자료 중 일부입니다.