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로 테스트 결과를 확인하려면 다음 단계를 따라요.

  1. GitHub에서 HdrHistogram 저장소를 로컬로 클론해요.
git clone https://github.com/HdrHistogram/HdrHistogram.git
  1. HdrHistogram 폴더로 전환해요.
cd HdrHistogram
  1. HdrHistogram Plotter를 설치해요.
mvn clean install -DskipTests
  1. Pulsar Perf가 생성한 파일을 변환해요.
./HistogramLogProcessor -i <hgrm file path that pulsar-perf generated> -o <output file>
  1. 파일 확장자가 .hgrm인 출력 파일 2개를 얻게 돼요. 확장자가 .hgrm인 출력 파일을 HdrHistogram Plotter에 업로드해요.

  2. 아래와 같이 HdrHistogram Plotter의 GUI를 통해 테스트 결과를 확인해요.

더 알아보기 (Learn more)