본문 바로가기
kafka/core

Key가 없는 메시지의 파티션 분배 전략 - 라운드로빈과 스티키 파티셔닝

by 개복이 2025. 4. 21.

Key가 없는 메시지의 파티션 분배 전략 - 라운드로빈과 스티키 파티셔닝

 

Key 값을 가지지 않는 메시지 전송 시 파티션 분배 전략

  • 라운도 로빈(Round Robin) : Kafka 2.4 버전 이전 기본 파티션 분배 전략
  • 스티키 파티셔닝(Sticky Partitioning) : Kafka 2.4 버전 이후 기본 파티션 분배 전략

 

Key 값을 가지지 않는 메시지 전송 시 파티션 분배 전략 - 라운드 로빈

  • 라운드 로빈은 최대한 메시지를 파티션에 균일하게 분배하려는 전략으로서 메시지 배치를 순차적으로 다른 파티션으로 전송한다.
  • 메시지가 배치 데이터를 빨리 채우지 못하면서 전송이 늦어지거나 배치를 다 채우지 못하고 전송하면서 전송 성능이 떨어지는 문제가 발생 (Batch 0, 1, 2에 고루고루 분배되고 쌓이게 되므로)

 

Key 값을 가지지 않는 메시지 전송 시 파티션 분배 전략 - 스티키 파티셔닝

  • 라운드 로빈의 성능을 개선하고자 특정 파티션으로 전송되는 하나의 배치에 메시지를 빠르게 먼저 채워서 보내는 방식 (Batch 0에 메시지를 빠르게 먼저 채워서 보내고 Batch 1에 메시지를 채워서 보내는)
  • 배치를 채우지 못하고 전송을 하거나 배치에 채우는 데 시간이 너무 오래 걸리는 문제를 개선

 

Key 값이 없는 메시지 전송 테스트

테스트 데이터 생성

for i in {1..2000}
do
echo "test nonkey test0000000000$i" >> load.log
done

 

메시지 발행

kafka-console-producer --bootstrap-server localhost:9092 --topic multipart-topic < load.log

 

메시지 소비

  • 파티션 단위로 전송되는것을 확인할 수 있다.
  • 메시지를 발행한 순서와 메시지를 소비하였을 때 순서가 불일치하는 것을 확인할 수 있다.
  • 이유는 Batch 단위로 메시지를 소비하기 때문이다.

댓글