Skip to content

Commit 42aa657

Browse files
authored
Chore/async profiler in the image (kroxylicious#2982)
* Unpack async-profiler into the container image Signed-off-by: Sam Barker <[email protected]> # Conflicts: # kroxylicious-app/src/assembly/kroxylicious-start.sh Signed-off-by: Sam Barker <[email protected]> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED # Conflicts: # pom.xml * validate that we found some tests to run before anything else happens Signed-off-by: Sam Barker <[email protected]> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED * Echo variables so they can be copied and pasted. Signed-off-by: Sam Barker <[email protected]> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED * Restructure how config is passed to the container Signed-off-by: Sam Barker <[email protected]> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED * Remove start stop profiler functions. They are now automatic Signed-off-by: Sam Barker <[email protected]> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED * Configure profiling for the container through env vars Signed-off-by: Sam Barker <[email protected]> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED * cleanup run scripts Signed-off-by: Sam Barker <[email protected]> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED * extract functions to common. Signed-off-by: Sam Barker <[email protected]> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED * finish refactoring to common-perf.sh Signed-off-by: Sam Barker <[email protected]> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED * add profiler logging. Signed-off-by: Sam Barker <[email protected]> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED * Make sure variable names and permissions align Signed-off-by: Sam Barker <[email protected]> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED * extract property to for consistent matching shared object files. Signed-off-by: Sam Barker <[email protected]> * Quote variable to prevent expansion Signed-off-by: Sam Barker <[email protected]> * run dockerComposeDown on exit Signed-off-by: Sam Barker <[email protected]> * remove ZSTD change from merge conflict resolution. Signed-off-by: Sam Barker <[email protected]> * fix typo in comment. Signed-off-by: Sam Barker <[email protected]> * Add comment on why we are using CP Signed-off-by: Sam Barker <[email protected]> --------- Signed-off-by: Sam Barker <[email protected]>
1 parent 3346bb1 commit 42aa657

File tree

11 files changed

+265
-269
lines changed

11 files changed

+265
-269
lines changed

kroxylicious-app/pom.xml

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323

2424
<name>Proxy application</name>
2525
<description>A runnable proxy application. Provides the main() method.</description>
26+
<properties>
27+
<!-- derived from snappy's resource-config.json -->
28+
<native.library.include.patterns>**/*.dylib,**/*.jnilib,**/*.so,**/*.a</native.library.include.patterns>
29+
</properties>
2630

2731
<dependencies>
2832
<!-- project dependencies - runtime and compile -->
@@ -106,7 +110,12 @@
106110
<groupId>com.github.spotbugs</groupId>
107111
<artifactId>spotbugs-annotations</artifactId>
108112
</dependency>
109-
113+
<dependency>
114+
<groupId>tools.profiler</groupId>
115+
<artifactId>async-profiler</artifactId>
116+
<version>${async-profiler.version}</version>
117+
<scope>runtime</scope>
118+
</dependency>
110119
<!-- third party dependencies - test -->
111120
<dependency>
112121
<groupId>org.assertj</groupId>
@@ -199,7 +208,7 @@
199208
<includeArtifactIds>netty-transport-native-epoll,netty-transport-native-unix-common,netty-transport-native-io_uring,netty-transport-native-kqueue</includeArtifactIds>
200209
<outputDirectory>${project.build.directory}/libs/native/netty</outputDirectory>
201210
<!-- derived form snappy's resource-config.json -->
202-
<includes>**/*.dylib,**/*.jnilib,**/*.so,**/*.a</includes>
211+
<includes>${native.library.include.patterns}</includes>
203212
<fileMappers>
204213
<org.codehaus.plexus.components.io.filemappers.FlattenFileMapper/>
205214
</fileMappers>
@@ -214,8 +223,7 @@
214223
<configuration>
215224
<includeArtifactIds>snappy-java</includeArtifactIds>
216225
<outputDirectory>${project.build.directory}/libs/native/snappy</outputDirectory>
217-
<!-- derived form snappy's resource-config.json -->
218-
<includes>**/*.dylib,**/*.jnilib,**/*.so,**/*.a</includes>
226+
<includes>${native.library.include.patterns}</includes>
219227
<!-- when built into the container paths are cases sensitive and the container build variables for arch and platform are lower case-->
220228
<fileMappers>
221229
<org.codehaus.plexus.components.io.filemappers.RegExpFileMapper>
@@ -254,8 +262,7 @@
254262
<configuration>
255263
<includeArtifactIds>zstd-jni</includeArtifactIds>
256264
<outputDirectory>${project.build.directory}/libs/native/zstd-jni</outputDirectory>
257-
<!-- derived form snappy's resource-config.json -->
258-
<includes>**/*.dylib,**/*.jnilib,**/*.so,**/*.a</includes>
265+
<includes>${native.library.include.patterns}</includes>
259266
</configuration>
260267
</execution>
261268
<execution>
@@ -267,8 +274,30 @@
267274
<configuration>
268275
<includeArtifactIds>lz4-java</includeArtifactIds>
269276
<outputDirectory>${project.build.directory}/libs/native/lz4-java</outputDirectory>
270-
<!-- derived form snappy's resource-config.json -->
271-
<includes>**/*.dylib,**/*.jnilib,**/*.so,**/*.a</includes>
277+
<includes>${native.library.include.patterns}</includes>
278+
</configuration>
279+
</execution>
280+
<execution>
281+
<id>unpack-async-profiler-native-libs</id>
282+
<phase>prepare-package</phase>
283+
<goals>
284+
<goal>unpack-dependencies</goal>
285+
</goals>
286+
<configuration>
287+
<includeArtifactIds>async-profiler</includeArtifactIds>
288+
<outputDirectory>${project.build.directory}/libs/native/async-profiler</outputDirectory>
289+
<includes>${native.library.include.patterns}</includes>
290+
<!-- use file mappers to provide a consistent directory structure -->
291+
<fileMappers>
292+
<org.codehaus.plexus.components.io.filemappers.RegExpFileMapper>
293+
<pattern>(.*)-(.*)</pattern>
294+
<replacement>$1/$2</replacement>
295+
</org.codehaus.plexus.components.io.filemappers.RegExpFileMapper>
296+
<org.codehaus.plexus.components.io.filemappers.RegExpFileMapper>
297+
<pattern>x64</pattern>
298+
<replacement>amd64</replacement>
299+
</org.codehaus.plexus.components.io.filemappers.RegExpFileMapper>
300+
</fileMappers>
272301
</configuration>
273302
</execution>
274303
</executions>

kroxylicious-app/src/assembly/kroxylicious-start.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,15 @@ LZ4_NATIVE_LIB=$(native_library_path lz4-java/net/jpountz/util)
6565
SNAPPY_NATIVE_LIB=$(native_library_path snappy/org/xerial/snappy/native)
6666
ZSTD_NATIVE_LIB=$(native_library_path zstd-jni)
6767
ZSTD_FULLY_QUALIFIED=$(ls "${ZSTD_NATIVE_LIB}"/libzstd-jni-*)
68+
69+
ASYNC_PROFILER_FULLY_QUALIFIED="$(native_library_path async-profiler)/libasyncProfiler.so"
70+
echo "Async profiler available at: ${ASYNC_PROFILER_FULLY_QUALIFIED} use the ASYNC_PROFILER_FLAGS to control its settings"
71+
72+
if [ -n "${ASYNC_PROFILER_ENABLED:-}" ] || [ -n "${ASYNC_PROFILER_FLAGS:-}" ]; then
73+
echo "profiler flags${ASYNC_PROFILER_FLAGS:+=${ASYNC_PROFILER_FLAGS}}"
74+
JAVA_OPTIONS="-agentpath:${ASYNC_PROFILER_FULLY_QUALIFIED}${ASYNC_PROFILER_FLAGS:+=${ASYNC_PROFILER_FLAGS}} ${JAVA_OPTIONS}"
75+
fi
76+
6877
NATIVE_LIB_PATH="${NATIVE_LIB_PATH:-${NETTY_NATIVE_LIB}:${LZ4_NATIVE_LIB}:${SNAPPY_NATIVE_LIB}:${ZSTD_NATIVE_LIB}:${LD_LIBRARY_PATH:-}}"
6978

7079
NATIVE_LIB_OPTIONS=${NATIVE_LIB_OPTIONS:-"-Djava.library.path=${NATIVE_LIB_PATH} -Dorg.xerial.snappy.disable.bundled.libs=true -DZstdNativePath=${ZSTD_FULLY_QUALIFIED}"}

performance-tests/01-no-proxy-baseline/run.sh

100644100755
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
# Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
66
#
77

8+
set -euo pipefail
9+
10+
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
11+
. "${SCRIPT_DIR}/../common-perf.sh"
12+
813
ENDPOINT=broker1:9092
914

1015
ENDPOINT=${ENDPOINT} doPerfTest

performance-tests/02-no-filters/run.sh

100644100755
Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,14 @@ set -euo pipefail
1010
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
1111
. "${SCRIPT_DIR}/../common-perf.sh"
1212

13-
CFG=02-no-filters/config.yaml
13+
CFG="${SCRIPT_DIR}/config.yaml"
1414
ENDPOINT=kroxylicious:9092
1515

16-
KROXYLICIOUS_CONFIG=${CFG} runDockerCompose up --detach --wait kroxylicious
17-
18-
setKroxyliciousContainerIdPID
16+
setupProxyConfig "${CFG}"
17+
runDockerCompose up --detach --wait kroxylicious
1918

2019
ENDPOINT=${ENDPOINT} doPerfTest
2120

22-
unsetKroxyliciousContainerIdPID
23-
2421
runDockerCompose rm -s -f kroxylicious
2522

2623

performance-tests/03-transform-filter/run.sh

100644100755
Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,14 @@ set -euo pipefail
1010
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
1111
. "${SCRIPT_DIR}/../common-perf.sh"
1212

13-
CFG=03-transform-filter/config.yaml
13+
CFG="${SCRIPT_DIR}/config.yaml"
1414
ENDPOINT=kroxylicious:9092
1515

16-
KROXYLICIOUS_CONFIG=${CFG} runDockerCompose up --detach --wait kroxylicious
17-
18-
setKroxyliciousContainerIdPID
16+
setupProxyConfig "${CFG}"
17+
runDockerCompose up --detach --wait kroxylicious
1918

2019
ENDPOINT=${ENDPOINT} doPerfTest
2120

22-
unsetKroxyliciousContainerIdPID
23-
2421
runDockerCompose rm -s -f kroxylicious
2522

2623

performance-tests/04-record-encryption-filter/run.sh

100644100755
Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,17 @@ set -euo pipefail
1010
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
1111
. "${SCRIPT_DIR}/../common-perf.sh"
1212

13-
set -euo pipefail
14-
15-
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
16-
. "${SCRIPT_DIR}/../common-perf.sh"
17-
18-
CFG=04-record-encryption-filter/config.yaml
13+
CFG="${SCRIPT_DIR}/config.yaml"
1914
ENDPOINT=kroxylicious:9092
2015

21-
KROXYLICIOUS_CONFIG=${CFG} runDockerCompose up --detach --wait kroxylicious vault
16+
setupProxyConfig "${CFG}"
17+
runDockerCompose up --detach --wait kroxylicious vault
2218

2319
${CONTAINER_ENGINE} exec vault vault secrets enable transit 1>/dev/null
24-
${CONTAINER_ENGINE} exec vault vault write -f transit/keys/KEK_${TOPIC} 1>/dev/null
25-
26-
setKroxyliciousContainerIdPID
20+
${CONTAINER_ENGINE} exec vault vault write -f "transit/keys/KEK_${TOPIC}" 1>/dev/null
2721

2822
ENDPOINT=${ENDPOINT} doPerfTest
2923

30-
unsetKroxyliciousContainerIdPID
31-
3224
runDockerCompose rm -s -f kroxylicious vault
3325

3426

performance-tests/05-record-encryption-filter-no-encrypt/run.sh

100644100755
Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,15 @@ set -euo pipefail
1010
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
1111
. "${SCRIPT_DIR}/../common-perf.sh"
1212

13-
set -euo pipefail
14-
15-
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
16-
. "${SCRIPT_DIR}/../common-perf.sh"
17-
18-
CFG=04-record-encryption-filter/config.yaml
13+
CFG="${SCRIPT_DIR}/../04-record-encryption-filter/config.yaml"
1914
ENDPOINT=kroxylicious:9092
2015

21-
KROXYLICIOUS_CONFIG=${CFG} runDockerCompose up --detach --wait kroxylicious vault
16+
setupProxyConfig "${CFG}"
17+
runDockerCompose up --detach --wait kroxylicious vault
2218

2319
docker exec vault vault secrets enable transit 1>/dev/null
2420
# Don't create a key
2521

26-
setKroxyliciousContainerIdPID
27-
2822
ENDPOINT=${ENDPOINT} doPerfTest
2923

30-
unsetKroxyliciousContainerIdPID
31-
3224
runDockerCompose rm -s -f kroxylicious vault
33-
34-
35-
36-

performance-tests/common-perf.sh

Lines changed: 136 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,142 @@
66
#
77

88
set -Eu
9+
GREEN='\033[0;32m'
10+
RED='\033[0;31m'
11+
YELLOW='\033[1;33m'
12+
PURPLE='\033[1;35m'
13+
BLUE='\033[0;34m'
14+
NO_COLOR='\033[0m'
915

10-
setKroxyliciousContainerIdPID () {
11-
KROXYLICIOUS_CONTAINER_ID=$(${CONTAINER_ENGINE} container list | grep kroxylicious | awk '{print $1}')
12-
KROXYLICIOUS_PID=$(${CONTAINER_ENGINE} top ${KROXYLICIOUS_CONTAINER_ID} | grep io.kroxylicious.app.Kroxylicious | awk '{print $2}')
16+
17+
18+
export GREEN RED YELLOW PURPLE BLUE NO_COLOR
19+
20+
runDockerCompose () {
21+
# Docker compose can't see $UID so need to set here before calling it
22+
${CONTAINER_ENGINE} compose -f "${PERF_TESTS_DIR}/docker-compose.yaml" "${@}"
23+
}
24+
25+
setupProxyConfig() {
26+
local kroxylicious_config=${1}
27+
# `cp` rather than `ln` to make sure its available to the container engine.
28+
cp "${kroxylicious_config}" "${PERF_TESTS_DIR}/proxy-config.yaml"
29+
}
30+
31+
doCreateTopic () {
32+
local TOPIC
33+
ENDPOINT=$1
34+
TOPIC=$2
35+
echo "creating topic ${TOPIC} using ${ENDPOINT}"
36+
${CONTAINER_ENGINE} run --rm --network "${PERF_NETWORK}" "${KAFKA_TOOL_IMAGE}" \
37+
bin/kafka-topics.sh --create --if-not-exists --topic "${TOPIC}" --bootstrap-server "${ENDPOINT}" 1>/dev/null
1338
}
1439

15-
unsetKroxyliciousContainerIdPID () {
16-
unset KROXYLICIOUS_CONTAINER_ID
17-
unset KROXYLICIOUS_PID
18-
}
40+
doDeleteTopic () {
41+
local ENDPOINT
42+
local TOPIC
43+
ENDPOINT=$1
44+
TOPIC=$2
45+
echo "deleting topic ${TOPIC} using ${ENDPOINT}"
46+
${CONTAINER_ENGINE} run --rm --network "${PERF_NETWORK}" "${KAFKA_TOOL_IMAGE}" \
47+
bin/kafka-topics.sh --delete --topic "${TOPIC}" --bootstrap-server "${ENDPOINT}"
48+
}
49+
50+
warmUp() {
51+
echo -e "${YELLOW}Running warm up${NO_COLOR}"
52+
producerPerf "$1" "$2" "${WARM_UP_NUM_RECORDS_PRE_TEST}" /dev/null > /dev/null
53+
consumerPerf "$1" "$2" "${WARM_UP_NUM_RECORDS_PRE_TEST}" /dev/null > /dev/null
54+
}
55+
56+
# runs kafka-producer-perf-test.sh transforming the output to an array of objects
57+
producerPerf() {
58+
local ENDPOINT
59+
local TOPIC
60+
local NUM_RECORDS
61+
local OUTPUT
62+
ENDPOINT=$1
63+
TOPIC=$2
64+
NUM_RECORDS=$3
65+
OUTPUT=$4
66+
67+
echo -e "${YELLOW}Running producer test${NO_COLOR}"
68+
69+
# Input:
70+
# 250000 records sent, 41757.140471 records/sec (40.78 MB/sec), 639.48 ms avg latency, 782.00 ms max latency
71+
# 250000 records sent, 41757.140471 records/sec (40.78 MB/sec), 639.48 ms avg latency, 782.00 ms max latency, 670 ms 50th, 771 ms 95th, 777 ms 99th, 781 ms 99.9th
72+
# Output:
73+
# [
74+
# { "sent": 204796, "rate_rps": 40959.2, "rate_mips": 40.00, "avg_lat_ms": 627.9, "max_lat_ms": 759.0 },
75+
# { "sent": 300000, "rate_rps": 43184.108248, "rate_mips": 42.17, "avg_lat_ms": 627.62, "max_lat_ms": 759.00,
76+
# "percentile50": 644, "percentile95": 744, "percentile99": 753, "percentile999": 758 }
77+
# ]
78+
79+
# shellcheck disable=SC2086
80+
${CONTAINER_ENGINE} run --rm --network "${PERF_NETWORK}" "${KAFKA_TOOL_IMAGE}" \
81+
bin/kafka-producer-perf-test.sh --topic "${TOPIC}" --throughput -1 --num-records "${NUM_RECORDS}" --record-size "${RECORD_SIZE}" \
82+
--producer-props ${PRODUCER_PROPERTIES} bootstrap.servers="${ENDPOINT}" | \
83+
jq --raw-input --arg name "${TEST_NAME}" --arg commit_id "${COMMIT_ID}" '[.,inputs] | [.[] | match("^(?<sent>\\d+) *records sent" +
84+
", *(?<rate_rps>\\d+[.]?\\d*) records/sec [(](?<rate_mips>\\d+[.]?\\d*) MB/sec[)]" +
85+
", *(?<avg_lat_ms>\\d+[.]?\\d*) ms avg latency" +
86+
", *(?<max_lat_ms>\\d+[.]?\\d*) ms max latency" +
87+
"(?<inflight>" +
88+
", *(?<percentile50>\\d+[.]?\\d*) ms 50th" +
89+
", *(?<percentile95>\\d+[.]?\\d*) ms 95th" +
90+
", *(?<percentile99>\\d+[.]?\\d*) ms 99th" +
91+
", *(?<percentile999>\\d+[.]?\\d*) ms 99.9th" +
92+
")?" +
93+
"[.]"; "g")] |
94+
{name: $name, commit_id: $commit_id, values: [.[] | .captures | map( { (.name|tostring): ( .string | tonumber? ) } ) | add | del(..|nulls)]}' > "${OUTPUT}"
95+
}
96+
97+
consumerPerf() {
98+
local ENDPOINT
99+
local TOPIC
100+
local NUM_RECORDS
101+
local OUTPUT
102+
103+
ENDPOINT=$1
104+
TOPIC=$2
105+
NUM_RECORDS=$3
106+
OUTPUT=$4
107+
108+
echo -e "${YELLOW}Running consumer test${NO_COLOR}"
109+
110+
# Input:
111+
# start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec, rebalance.time.ms, fetch.time.ms, fetch.MB.sec, fetch.nMsg.sec
112+
# 2024-02-21 19:36:23:839, 2024-02-21 19:36:24:256, 0.9766, 2.3419, 1000, 2398.0815, 364, 53, 18.4257, 18867.9245 # Output:
113+
# Output
114+
# [
115+
# { "sent": 204796, "rate_rps": 40959.2, "rate_mips": 40.00, "avg_lat_ms": 627.9, "max_lat_ms": 759.0 },
116+
# { "sent": 300000, "rate_rps": 43184.108248, "rate_mips": 42.17, "avg_lat_ms": 627.62, "max_lat_ms": 759.00,
117+
# "percentile50": 644, "percentile95": 744, "percentile99": 753, "percentile999": 758 }
118+
# ]
119+
120+
${CONTAINER_ENGINE} run --rm --network "${PERF_NETWORK}" "${KAFKA_TOOL_IMAGE}" \
121+
bin/kafka-consumer-perf-test.sh --topic "${TOPIC}" --messages "${NUM_RECORDS}" --hide-header \
122+
--bootstrap-server "${ENDPOINT}" |
123+
jq --raw-input --arg name "${TEST_NAME}" --arg commit_id "${COMMIT_ID}" '[.,inputs] | [.[] | match("^(?<start.time>\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}:\\d{3}), " +
124+
"(?<end.time>\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}:\\d{3}), " +
125+
"(?<data.consumed.in.MB>\\d+[.]?\\d*), " +
126+
"(?<MB.sec>\\d+[.]?\\d*), " +
127+
"(?<data.consumed.in.nMsg>\\d+[.]?\\d*), " +
128+
"(?<nMsg.sec>\\d+[.]?\\d*), " +
129+
"(?<rebalance.time.ms>\\d+[.]?\\d*), " +
130+
"(?<fetch.time.ms>\\d+[.]?\\d*), " +
131+
"(?<fetch.MB.sec>\\d+[.]?\\d*), " +
132+
"(?<fetch.nMsg.sec>\\d+[.]?\\d*)"; "g")] |
133+
{ name: $name, commit_id: $commit_id, values: [.[] | .captures | map( { (.name|tostring): ( .string | tonumber? ) } ) | add | del(..|nulls)]}' > "${OUTPUT}"
134+
}
135+
136+
# expects TEST_NAME, TOPIC, ENDPOINT, PRODUCER_RESULT and CONSUMER_RESULT to be set
137+
doPerfTest () {
138+
139+
doCreateTopic "${ENDPOINT}" "${TOPIC}"
140+
warmUp "${ENDPOINT}" "${TOPIC}"
141+
142+
producerPerf "${ENDPOINT}" "${TOPIC}" "${NUM_RECORDS}" "${PRODUCER_RESULT}"
143+
144+
consumerPerf "${ENDPOINT}" "${TOPIC}" "${NUM_RECORDS}" "${CONSUMER_RESULT}"
145+
146+
doDeleteTopic "${ENDPOINT}" "${TOPIC}"
147+
}

0 commit comments

Comments
 (0)