카프카/Kakfa Topic, Producer, Consumer

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

webmaster 2025. 7. 21. 23:11
728x90

Partitionning 동작 과정

  • Partitioner에 메시지가 들어오면 Partition에서 Batch로 메시지를 모아 전달한다.
    • Batch 레벨로 메시지를 전달한다.

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

  • 라운드 로빈: kafka 2.4 버전 이전 기본 파티션 분배 전략
  • 스티키 파티셔닝: kafka 2.4 버전부터 기본 파티션 분배 전략

라운드 로빈

  • 라운드 로빈은 최대한 메시지를 파티션에 균일하게 분배하려는 전략으로서 메시지 배치를 순차적으로 다른 파티션으로 전송한다.
  • Batch.size 만큼 쌓이거나, linger.ms가 지나면 자동 전달
  • 문제점: 메시지가 배치 데이터를 빨리 채우지 못하면서 전송이 늦어지거나 배치를 다 채우지 못하고 전송하면서, 전송 성능이 떨어지는 문제 발생

스티키 파티셔닝

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

실습

1) Script 파일 생성

touch load.log

2) 로그 파일에 text 넣기

 for i in {1..2000}; do echo "test nonkey message sent test0000000000000000 $i" >> load.log; done

 

3) Consumer 실행

 kafka-console-consumer --bootstrap-server localhost:9092 --topic multipart-topic --property print.partition=true

4) Producer 실행

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

Consumer 에 결과 확인

  • 스티키 파티셔닝 기반으로 동작한 걸 확인할 수 있음
728x90