Programming/Open Source

[Kafka] Kafka 성능테스트

Allg 2021. 5. 15. 17:10
kafka  version 2.11 -  카프카 성능 테스트 정리

 

- Kafka 에서 제공하는 테스트용 스크립트 이용

- path : kafka/bin

- kafka-producer-perf-test.sh 

- kafka-consumer-perf-test.sh

- 위 스크립트를 옵션 없이 실행 시 아래와 같이 사용법 및 옵션 확인 가능 테스트용 토픽을 생성해서 테스트 진행

default 설정으로 사용시 최대 전송 가능한 record-size = 1MB (1048588 bytes)
1MB 이상 전송 시 카프카 설정 수정 후 재시작
server.properties → message.max.bytes
producer.properties → max.request.size
consumer.properties → max.partition.fetch.bytes
topic
- max.message.bytes
- retention.ms
    → 테스트로 사용하므로 300000ms -> 5분으로 설정해서 사용
    → default = 604800000ms → 7일 이므로 반복적인 테스트 시 용량 이슈 발생할 수 있음

 

서버 사양

  • 장비스펙
    • CPU : 16 Core (2.1Ghz 8 Core * 2)
    • Mem : 252G
    • Disk : 439G (개발)
    • DISK I/O 평균 4MB/M

준비사항

  • 테스트용 토픽 생성
    • kafka-manager 에서 생성 또는 명령어로 생성
    •  topic
      • perf-topic
      • perf-topic-1 (partition 1)
      • perf-topic-3 (partition 3)
      • perf-topic-8 (partition 8)
    • replication factor : 1
    • retention.ms : 300000 (5분)
    • max.message.bytes:= 20485760 (20MB)
    #토픽생성
    /usr/local/kafka/bin/kafka-topics.sh --create --zookeeper {zookeeper ip:port} --replication-factor 1 --partitions 1 --topic testTopic
    
    #토픽 리스트 확인
    /usr/local/kafka/bin/kafka-topics.sh --list --zookeeper {zookeeper ip:port}
    
    #토픽 설정 변경
    /usr/local/kafka/bin/kafka-configs.sh --zookeeper {zookeeper ip:port} --entity-type topics --entity-name perf-topic --alter --add-config max.message.bytes=20485760​

용어 설명

  • throughput
    • 초당 record 처리 수
    • -1 옵션인 경우 카프카에 최대 처리량으로 적용

Producer Test

  • kafka/bin/kafka-producer-perf-test.sh
  • throughput = -1 로 설정 시 Kafka 로 전송가능한 최대 메시지 수로 전송
  • producer.properties 설정은 producer.config 옵셥으로 주입 (1MB 이상 등 default 설정이 아닌 경우 테스트 옵션에 맞게 변경된 설정을 주입해야함)
  • record-size : 레코드 사이즈(byte)
    • 1MB = 1,000,000
    • 10MB =10,000,000
    • 15MB = 15,000,000
    • 20MB = 20,000,000
  • num-records : 생성할 메시지 수
  • throughput : 최대 메시지 처리량 (초당)
    • default = -1 (카프카가 처리가능한 최대 메시지로 전송)

실행 결과

/usr/local/kafka/bin/kafka-producer-perf-test.sh \
--topic perf-topic-1 \
--record-size 50000 \
--num-records 40000 \
--producer-props \
bootstrap.servers={kafka ip:port}  \
--producer.config /usr/local/kafka/config/producer.properties \
--throughput -1

1000 records sent, 220.507166 records/sec (210.29 MB/sec), 139.82 ms avg latency, 320.00 ms max latency, 139 ms 50th, 170 ms 95th, 180 ms 99th, 320 ms 99.9th.

 

Consumer Test

  • messages : 소비할 메시지 개수
  • reporting-interval : 리포팅 간격

실행 결과

/usr/local/kafka/bin/kafka-consumer-perf-test.sh \
--topic perf-topic-1 \
--show-detailed-stats \
--group perf-group \
--broker-list {kafka server ip:port} \
--reporting-interval 1000 \
--messages 1000000

 

결과

  • 카프카 임계치 측정을 위해 thoughput 을 -1, 100, 1000, 10000 으로 설정하여 테스트한 결과
  • 카프카가 처리 가능한 최대 처리량으로 처리됨 ⇒ 최대처리량은 -1 옵션으로 설정해서 나오는 값이며, record-size=1MB 기준 200MB/sec
  • record-size = 1MB 기준 카프카는 200MB/sec 처리하며 record-size 가 증가함에 따라 처리량은 감소
  • Producer 개수 증가에 따라 초당 처리량(MB/sec)은 감소하나, N개의 프로듀서가 처리하는 전체 처리량은 증가