Pulsar Perf
Pulsar Perf
Pulsar Perf는 Apache Pulsar의 내장 성능 테스트 도구예요. 메시지 쓰기·읽기 성능을 테스트하는 데 사용할 수 있어요. 성능 튜닝에 대한 자세한 정보는 여기를 참고해요.
출처: 문서
본문
메시지 생성 (Produce messages)
tip
pulsar-perf에 대한 최신·완전한 정보(명령어, 플래그, 설명 등)는pulsar-perf를 참고해요.
- 이 예시는 Pulsar Perf가 기본(default) 옵션으로 메시지를 생성하는 방법을 보여줘요.
입력 (Input)
bin/pulsar-perf produce my-topic
명령이 실행된 후 테스트 데이터가 콘솔에 지속적으로 출력돼요.
출력 (Output)
19:53:31.459 [pulsar-perf-producer-exec-1-1] INFO org.apache.pulsar.testclient.PerformanceProducer - Created 1 producers
19:53:31.482 [pulsar-timer-5-1] WARN com.scurrilous.circe.checksum.Crc32cIntChecksum - Failed to load Circe JNI library. Falling back to Java based CRC32c provider
19:53:40.861 [main] INFO org.apache.pulsar.testclient.PerformanceProducer - Throughput produced: 93.7 msg/s --- 0.7 Mbit/s --- failure 0.0 msg/s --- Latency: mean: 3.575 ms - med: 3.460 - 95pct: 4.790 - 99pct: 5.308 - 99.9pct: 5.834 - 99.99pct: 6.609 - Max: 6.609
19:53:50.909 [main] INFO org.apache.pulsar.testclient.PerformanceProducer - Throughput produced: 100.0 msg/s --- 0.8 Mbit/s --- failure 0.0 msg/s --- Latency: mean: 3.437 ms - med: 3.328 - 95pct: 4.656 - 99pct: 5.071 - 99.9pct: 5.519 - 99.99pct: 5.588 - Max: 5.588
19:54:00.926 [main] INFO org.apache.pulsar.testclient.PerformanceProducer - Throughput produced: 100.0 msg/s --- 0.8 Mbit/s --- failure 0.0 msg/s --- Latency: mean: 3.376 ms - med: 3.276 - 95pct: 4.520 - 99pct: 4.939 - 99.9pct: 5.440 - 99.99pct: 5.490 - Max: 5.490
19:54:10.940 [main] INFO org.apache.pulsar.testclient.PerformanceProducer - Throughput produced: 100.0 msg/s --- 0.8 Mbit/s --- failure 0.0 msg/s --- Latency: mean: 3.298 ms - med: 3.220 - 95pct: 4.474 - 99pct: 4.926 - 99.9pct: 5.645 - 99.99pct: 5.654 - Max: 5.654
19:54:20.956 [main] INFO org.apache.pulsar.testclient.PerformanceProducer - Throughput produced: 100.1 msg/s --- 0.8 Mbit/s --- failure 0.0 msg/s --- Latency: mean: 3.308 ms - med: 3.199 - 95pct: 4.532 - 99pct: 4.871 - 99.9pct: 5.291 - 99.99pct: 5.323 - Max: 5.323
19:54:30.972 [main] INFO org.apache.pulsar.testclient.PerformanceProducer - Throughput produced: 100.0 msg/s --- 0.8 Mbit/s --- failure 0.0 msg/s --- Latency: mean: 3.249 ms - med: 3.144 - 95pct: 4.437 - 99pct: 4.970 - 99.9pct:...
위 테스트 데이터에서 처리량(throughput) 통계와 쓰기 지연 시간 통계를 얻을 수 있어요. 집계 통계는 Pulsar Perf가 중지될 때 출력돼요. Ctrl+C를 눌러 Pulsar Perf를 중지할 수 있어요. Pulsar Perf가 중지된 뒤 HdrHistogram 형식의 테스트 결과가 디렉터리에 나타나요. 문서는 perf-producer-1589370810837.hgrm처럼 보여요. HdrHistogram Plotter로 테스트 결과를 확인할 수도 있어요. HdrHistogram Plotter로 테스트 결과를 확인하는 방법은 HdrHistogram Plotter를 참고해요.
- 이 예시는 Pulsar Perf가
transaction옵션으로 메시지를 생성하는 방법을 보여줘요.
입력 (Input)
bin/pulsar-perf produce my-topic -r 10 -m 100 -txn
출력 (Output)
2021-10-11T13:36:15,595+0800 INFO [Thread-3] o.a.p.t.PerformanceProducer@499 - --- Transaction : 2 transaction end successfully --- 0 transaction end failed --- 0.200 Txn/s
2021-10-11T13:36:15,614+0800 INFO [Thread-3] o.a.p.t.PerformanceProducer@503 - Throughput produced: 100 msg --- 0.0 msg/s --- 0.1 Mbit/s --- failure 0.0 msg/s --- Latency: mean: 3.067 ms - med: 3.104 - 95pct: 3.747 - 99pct: 4.619 - 99.9pct: 6.760 - 99.99pct: 6.760 - Max: 6.760
2021-10-11T13:36:15,710+0800 INFO [pulsar-perf-producer-exec-46-1] o.a.p.t.PerformanceProducer@834 - Aggregated latency stats --- Latency: mean: 3.067 ms - med: 3.104 - 95pct: 3.747 - 99pct: 4.619 - 99.9pct: 6.760 - 99.99pct: 6.760 - 99.999pct: 6.760 - Max: 6.760
2021-10-11T13:36:29,976+0800 INFO [Thread-4] o.a.p.t.PerformanceProducer@815 - --- Transaction : 2 transaction end successfully --- 0 transaction end failed --- 2 transaction open successfully --- 0 transaction open failed --- 12.237 Txn/s
2021-10-11T13:36:29,976+0800 INFO [Thread-4] o.a.p.t.PerformanceProducer@824 - Aggregated throughput stats --- 102 records sent --- 4.168 msg/s --- 0.033 Mbit/s
메시지 소비 (Consume messages)
tip
pulsar-perf에 대한 최신·완전한 정보(명령어, 플래그, 설명 등)는pulsar-perf를 참고해요.
- 이 예시는 Pulsar Perf가 기본(default) 옵션으로 메시지를 소비하는 방법을 보여줘요.
입력 (Input)
note 이전에 토픽(이 예시에서는 my-topic)을 만들지 않았다면, 브로커가 파티션과 메시지가 없는 새 토픽을 만들고 컨슈머는 어떤 메시지도 받을 수 없어요. 따라서
pulsar-perf consume을 사용하기 전에 토픽에 소비할 충분한 메시지가 있는지 확인해요.
bin/pulsar-perf consume my-topic
명령이 실행된 후 테스트 데이터가 콘솔에 지속적으로 출력돼요.
출력 (Output)
20:35:37.071 [main] INFO org.apache.pulsar.testclient.PerformanceConsumer - Start receiving from 1 consumers on 1 topics
20:35:41.150 [pulsar-client-io-1-9] WARN com.scurrilous.circe.checksum.Crc32cIntChecksum - Failed to load Circe JNI library. Falling back to Java based CRC32c provider
20:35:47.092 [main] INFO org.apache.pulsar.testclient.PerformanceConsumer - Throughput received: 59.572 msg/s -- 0.465 Mbit/s --- Latency: mean: 11.298 ms - med: 10 - 95pct: 15 - 99pct: 98 - 99.9pct: 137 - 99.99pct: 152 - Max: 152
20:35:57.104 [main] INFO org.apache.pulsar.testclient.PerformanceConsumer - Throughput received: 99.958 msg/s -- 0.781 Mbit/s --- Latency: mean: 9.176 ms - med: 9 - 95pct: 15 - 99pct: 16 - 99.9pct: 17 - 99.99pct: 18 - Max: 18
20:36:07.115 [main] INFO org.apache.pulsar.testclient.PerformanceConsumer - Throughput received: 100.006 msg/s -- 0.781 Mbit/s --- Latency: mean: 9.316 ms - med: 9 - 95pct: 15 - 99pct: 16 - 99.9pct: 17 - 99.99pct: 17 - Max: 17
20:36:17.125 [main] INFO org.apache.pulsar.testclient.PerformanceConsumer - Throughput received: 100.085 msg/s -- 0.782 Mbit/s --- Latency: mean: 9.327 ms - med: 9 - 95pct: 15 - 99pct: 16 - 99.9pct: 17 - 99.99pct: 17 - Max: 17
20:36:27.136 [main] INFO org.apache.pulsar.testclient.PerformanceConsumer - Throughput received: 99.900 msg/s -- 0.780 Mbit/s --- Latency: mean: 9.404 ms - med: 9 - 95pct: 15 - 99pct: 16 - 99.9pct: 17 - 99.99pct: 17 - Max: 17
20:36:37.147 [main] INFO org.apache.pulsar.testclient.PerformanceConsumer - Throughput received: 99.985 msg/s -- 0.781 Mbit/s --- Latency: mean: 8.998 ms - med: 9 - 95pct: 15 - 99pct: 16 - 99.9pct: 17 - 99.99pct: 17 - Max: 17
^C
20:36:42.755 [Thread-1] INFO org.apache.pulsar.testclient.PerformanceConsumer - Aggregated throughput stats --- 6051 records received --- 92.125 msg/s --- 0.720 Mbit/s
20:36:42.759 [Thread-1] INFO org.apache.pulsar.testclient.PerformanceConsumer - Aggregated latency stats --- Latency: mean: 9.422 ms - med: 9 - 95pct: 15 - 99pct: 16 - 99....
출력 테스트 데이터에서 처리량 통계와 종단 간(end-to-end) 지연 시간 통계를 얻을 수 있어요. 집계 통계는 Pulsar Perf가 중지된 후 출력돼요. Ctrl+C를 눌러 Pulsar Perf를 중지할 수 있어요.
- 이 예시는 Pulsar Perf가
transaction옵션으로 메시지를 소비하는 방법을 보여줘요.
입력 (Input)
bin/pulsar-perf consume my-topic -r 10 -txn -ss mysubName -st Exclusive -sp Earliest -ntxn 10
note 이전에 토픽(이 예시에서는 my-topic)을 만들지 않았다면, 브로커가 파티션과 메시지가 없는 새 토픽을 만들고 컨슈머는 어떤 메시지도 받을 수 없어요. 따라서
pulsar-perf consume을 사용하기 전에 토픽에 소비할 충분한 메시지가 있는지 확인해요.
출력 (Output)
2021-10-11T13:43:36,052+0800 INFO [Thread-3] o.a.p.t.PerformanceConsumer@538 - --- Transaction: 6 transaction end successfully --- 0 transaction end failed --- 0.199 Txn/s --- AckRate: 9.952 msg/s
2021-10-11T13:43:36,065+0800 INFO [Thread-3] o.a.p.t.PerformanceConsumer@545 - Throughput received: 306 msg --- 9.952 msg/s -- 0.000 Mbit/s --- Latency: mean: 26177.380 ms - med: 26128 - 95pct: 30531 - 99pct: 30923 - 99.9pct: 31021 - 99.99pct: 31021 - Max: 31021
2021-10-11T13:43:59,854+0800 INFO [Thread-5] o.a.p.t.PerformanceConsumer@579 - -- Transaction: 10 transaction end successfully --- 0 transaction end failed --- 10 transaction open successfully --- 0 transaction open failed --- 0.185 Txn/s
2021-10-11T13:43:59,854+0800 INFO [Thread-5] o.a.p.t.PerformanceConsumer@588 - Aggregated throughput stats --- 505 records received --- 9.345 msg/s --- 0.000 Mbit/s--- AckRate: 9.27065308842743 msg/s --- ack failed 4 msg
2021-10-11T13:43:59,882+0800 INFO [Thread-5] o.a.p.t.PerformanceConsumer@601 - Aggregated latency stats --- Latency: mean: 50593.000 ms - med: 50593 - 95pct: 50593 - 99pct: 50593 - 99.9pct: 50593 - 99.99pct: 50593 - 99.999pct: 50593 - Max: 50593
트랜잭션 (Transactions)
이 섹션은 Pulsar Perf가 트랜잭션을 실행하는 방법을 보여줘요. 자세한 내용은 Pulsar transactions를 참고해요.
트랜잭션 사용 (Use transaction)
이 예시는 50개의 트랜잭션을 실행해요. 각 트랜잭션은 1개 메시지(기본값)를 보내고 받아요.
입력 (Input)
bin/pulsar-perf transaction --topics-c myConsumerTopic --topics-p MyproduceTopic -threads 1 -ntxn 50 -ss testSub -nmp 1 -nmc 1
note 이전에 토픽(이 예시에서는 myConsumerTopic)을 만들지 않았다면, 브로커가 파티션과 메시지가 없는 새 토픽을 만들고 컨슈머는 어떤 메시지도 받을 수 없어요. 따라서
pulsar-perf transaction을 사용하기 전에 토픽에 소비할 충분한 메시지가 있는지 확인해요.
출력 (Output)
2021-10-11T14:37:27,863+0800 INFO [Thread-5] o.a.p.t.PerformanceProducer@613 - Messages ack aggregated latency stats --- Latency: mean: 29.239 ms - med: 26.799 - 95pct: 46.696 - 99pct: 55.660 - 99.9pct: 55.660 - 99.99pct: 55.660 - 99.999pct: 55.660 - Max: 55.660 {}
2021-10-11T14:37:19,391+0800 INFO [Thread-4] o.a.p.t.PerformanceProducer@525 - Throughput transaction: 50 transaction executes --- 4.999 transaction/s ---send Latency: mean: 31.368 ms - med: 28.369 - 95pct: 55.631 - 99pct: 57.764 - 99.9pct: 57.764 - 99.99pct: 57.764 - Max: 57.764---ack Latency: mean: 29.239 ms - med: 26.799 - 95pct: 46.696 - 99pct: 55.660 - 99.9pct: 55.660 - 99.99pct: 55.660 - Max: 55.660 {}
2021-10-11T14:37:26,625+0800 INFO [Thread-5] o.a.p.t.PerformanceProducer@571 - Aggregated throughput stats --- 50 transaction executed --- 2.718 transaction/s --- 50 transaction open successfully --- 0 transaction open failed --- 50 transaction end successfully --- 0 transaction end failed--- 0 message ack failed --- 0 message send failed--- 50 message ack success --- 50 message send success {}
트랜잭션 비활성화 (Disable Transaction)
이 예시는 트랜잭션을 비활성화해요.
입력 (Input)
bin/pulsar-perf transaction --topics-c myConsumerTopic --topics-p myproduceTopic -threads 1 -ntxn 50 -ss testSub --txn-disEnable
note 이전에 토픽(이 예시에서는 myConsumerTopic)을 만들지 않았다면, 브로커가 파티션과 메시지가 없는 새 토픽을 만들고 컨슈머는 어떤 메시지도 받을 수 없어요. 따라서
pulsar-perf transaction --txn-disEnable을 사용하기 전에 토픽에 소비할 충분한 메시지가 있는지 확인해요.
출력 (Output)
2021-10-11T16:48:26,876+0800 INFO [Thread-4] o.a.p.t.PerformanceProducer@529 - Throughput task: 50 task executes --- 4.999 task/s ---send Latency: mean: 10.002 ms - med: 9.875 - 95pct: 11.733 - 99pct: 15.995 - 99.9pct: 15.995 - 99.99pct: 15.995 - Max: 15.995---ack Latency: mean: 0.051 ms - med: 0.020 - 95pct: 0.059 - 99pct: 1.377 - 99.9pct: 1.377 - 99.99pct: 1.377 - Max: 1.377
2021-10-11T16:48:29,222+0800 INFO [Thread-5] o.a.p.t.PerformanceProducer@617 - Messages ack aggregated latency stats --- Latency: mean: 0.051 ms - med: 0.020 - 95pct: 0.059 - 99pct: 1.377 - 99.9pct: 1.377 - 99.99pct: 1.377 - Max: 1.377
2021-10-11T16:48:29,246+0800 INFO [Thread-5] o.a.p.t.PerformanceProducer@629 - Messages send aggregated latency stats --- Latency: mean: 10.002 ms - med: 9.875 - 95pct: 11.733 - 99pct: 15.995 - 99.9pct: 15.995 - 99.99pct: 15.995 - 99.999pct: 15.995 - Max: 15.995
2021-10-11T16:48:29,117+0800 INFO [Thread-5] o.a.p.t.PerformanceProducer@602 - Aggregated throughput stats --- 50 task executed --- 4.025 task/s --- 0 message ack failed --- 0 message send failed--- 50 message ack success --- 50 message send success
구성 (Configurations)
기본적으로 Pulsar Perf는 conf/client.conf를 기본 구성으로 사용하고 conf/log4j2.yaml을 기본 Log4j 구성으로 사용해요. 다른 Pulsar 클러스터에 연결하려면 클라이언트 구성의 brokerServiceUrl을 업데이트할 수 있어요.
다음 명령으로 구성 파일과 Log4j 구성 파일을 변경할 수 있어요.
export PULSAR_CLIENT_CONF=<your-config-file>
export PULSAR_LOG_CONF=<your-log-config-file>
또한 다음 명령으로 환경 변수를 통해 JVM 구성을 설정할 수 있어요.
export PULSAR_EXTRA_OPTS='-Xms4g -Xmx4g -XX:MaxDirectMemorySize=4g'
HdrHistogram Plotter
HdrHistogram Plotter는 Pulsar Perf 테스트 결과를 확인하는 시각화 도구로, 테스트 결과를 더 쉽게 관찰할 수 있게 해줘요.
HdrHistogram Plotter로 테스트 결과를 확인하려면 다음 단계를 따라요.
- GitHub에서 HdrHistogram 저장소를 로컬로 클론해요.
git clone https://github.com/HdrHistogram/HdrHistogram.git
- HdrHistogram 폴더로 전환해요.
cd HdrHistogram
- HdrHistogram Plotter를 설치해요.
mvn clean install -DskipTests
- Pulsar Perf가 생성한 파일을 변환해요.
./HistogramLogProcessor -i <hgrm file path that pulsar-perf generated> -o <output file>
-
파일 확장자가 .hgrm인 출력 파일 2개를 얻게 돼요. 확장자가 .hgrm인 출력 파일을 HdrHistogram Plotter에 업로드해요.
-
아래와 같이 HdrHistogram Plotter의 GUI를 통해 테스트 결과를 확인해요.
더 알아보기 (Learn more)
pulsar-perf의 모든 명령·플래그는pulsar-perf문서를 참고해요.- 트랜잭션을 더 알고 싶다면 Pulsar transactions 문서를 봐요.
- 성능 튜닝 아키텍처에 대한 자세한 내용은 Pulsar architecture performance tuning 블로그를 참고해요.