From aab264b6bc05f35b886afe36fb94ba4fcd87bce7 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Sun, 14 Jul 2024 22:41:25 +0800 Subject: [PATCH 01/29] Performance tests plan. --- doc/Pulsar_KoP.png | Bin 0 -> 49857 bytes doc/kafka.png | Bin 0 -> 31443 bytes doc/performance_test.md | 179 ++++++++++++++++++ driver-kafka/kafka-ack-all-nofsync.yaml | 42 ++++ driver-kop/kafka_to_kafka_asp_perf.yaml | 49 +++++ .../driver/kop/KopBenchmarkDriver.java | 19 ++ .../driver/kop/config/PulsarConfig.java | 10 + driver-pulsar/pulsar_asp_perf.yaml | 51 +++++ .../driver/pulsar/PulsarBenchmarkDriver.java | 8 +- .../pulsar/config/PulsarConsumerConfig.java | 1 + .../pulsar/config/PulsarProducerConfig.java | 1 + .../1-topic-1-partition-1p-1c-100b.yaml | 27 +++ .../1-topic-1-partition-1p-1c-1kb.yaml | 26 +++ .../1-topic-1-partition-1p-1c-64kb.yaml | 26 +++ .../1-topic-16-partition-1p-1c-100b.yaml | 27 +++ .../1-topic-16-partition-1p-1c-1kb.yaml | 26 +++ .../1-topic-16-partition-1p-1c-64kb.yaml | 26 +++ .../1-topic-512-partition-16p-16c-100b.yaml | 27 +++ .../1-topic-512-partition-16p-16c-1kb.yaml | 26 +++ .../1-topic-512-partition-16p-16c-64kb.yaml | 26 +++ .../1-topic-64-partition-4p-4c-100b.yaml | 27 +++ .../1-topic-64-partition-4p-4c-1kb.yaml | 26 +++ .../1-topic-64-partition-4p-4c-64kb.yaml | 26 +++ 23 files changed, 674 insertions(+), 2 deletions(-) create mode 100644 doc/Pulsar_KoP.png create mode 100644 doc/kafka.png create mode 100644 doc/performance_test.md create mode 100644 driver-kafka/kafka-ack-all-nofsync.yaml create mode 100644 driver-kop/kafka_to_kafka_asp_perf.yaml create mode 100644 driver-pulsar/pulsar_asp_perf.yaml create mode 100644 workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml create mode 100644 workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml create mode 100644 workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml create mode 100644 workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml create mode 100644 workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml create mode 100644 workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml create mode 100644 workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml create mode 100644 workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml create mode 100644 workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml create mode 100644 workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml create mode 100644 workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml create mode 100644 workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml diff --git a/doc/Pulsar_KoP.png b/doc/Pulsar_KoP.png new file mode 100644 index 0000000000000000000000000000000000000000..4164a5dc6ca86d16c0615657628c280538fa7006 GIT binary patch literal 49857 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

Nub&Q~)#1 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

H|{& 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 Np`v@U9AOpl{{fAg?BW0b literal 0 HcmV?d00001 diff --git a/doc/kafka.png b/doc/kafka.png new file mode 100644 index 0000000000000000000000000000000000000000..d4a1606d00e4a3023900ea46436fcdd846dd9c10 GIT binary patch literal 31443 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 tit@Jv*#+cjeop+>e_Hv!O`u=Wb^? producers = new CopyOnWriteArrayList<>(); private final List consumers = new CopyOnWriteArrayList<>(); @@ -99,6 +105,19 @@ public void initialize(File configurationFile, StatsLogger statsLogger) throws I ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, ByteArrayDeserializer.class); final PulsarConfig pulsarConfig = config.pulsarConfig; + + try (PulsarAdmin admin1 = PulsarAdmin.builder().serviceHttpUrl(pulsarConfig.serviceUrl).build()) { + // Set namespace policies + PulsarConfig.PersistentConfig pc = pulsarConfig.persistent; + admin1.namespaces().setDeduplicationStatus( + "public/default", pc.deduplicationEnabled); + admin1.namespaces().setPersistence("public/default", new + PersistencePolicies(pc.ensembleSize, pc.writeQuorumSize, pc.ackQuorumSize, 1.0)); + } catch (Throwable ex) { + log.error("Failed to connect to Pulsar service at {}", pulsarConfig.serviceUrl, ex); + throw new RuntimeException(ex); + } + if (config.producerType.equals(ClientType.PULSAR)) { producerBuilder = getPulsarClient(pulsarConfig.serviceUrl) diff --git a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java index 3017219af..438ae8af1 100644 --- a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java +++ b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java @@ -28,4 +28,14 @@ public class PulsarConfig { // consumer configs public int maxTotalReceiverQueueSizeAcrossPartitions = 50000; public int receiverQueueSize = 1000; + + public PersistentConfig persistent = new PersistentConfig(); + + + public static class PersistentConfig { + public int ensembleSize = 3; + public int writeQuorumSize = 3; + public int ackQuorumSize = 2; + public boolean deduplicationEnabled = false; + } } diff --git a/driver-pulsar/pulsar_asp_perf.yaml b/driver-pulsar/pulsar_asp_perf.yaml new file mode 100644 index 000000000..6e9f71a91 --- /dev/null +++ b/driver-pulsar/pulsar_asp_perf.yaml @@ -0,0 +1,51 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: Pulsar +driverClass: io.openmessaging.benchmark.driver.pulsar.PulsarBenchmarkDriver + +# Pulsar client-specific configuration +client: + serviceUrl: pulsar://localhost:6650 + httpUrl: http://localhost:8080 + ioThreads: 16 + connectionsPerBroker: 8 + clusterName: local + namespacePrefix: benchmark/ns + topicType: persistent + persistence: + ensembleSize: 3 + writeQuorum: 3 + ackQuorum: 2 + deduplicationEnabled: false + tlsAllowInsecureConnection: false + tlsEnableHostnameVerification: false + tlsTrustCertsFilePath: + authentication: + plugin: + data: + +# Producer configuration +producer: + batchingEnabled: true + batchingMaxPublishDelayMs: 1 + batchingMaxBytes: 131072 + blockIfQueueFull: true + pendingQueueSize: 0 + batchingPartitionSwitchFrequencyByPublishDelay: 2 + +consumer: + receiverQueueSize: 10000 + subscriptionType: Failover + maxTotalReceiverQueueSizeAcrossPartitions: 5000000 diff --git a/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java b/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java index f65fe4f48..cabcb2003 100644 --- a/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java +++ b/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java @@ -26,6 +26,7 @@ import io.openmessaging.benchmark.driver.ConsumerCallback; import io.openmessaging.benchmark.driver.pulsar.config.PulsarClientConfig.PersistenceConfiguration; import io.openmessaging.benchmark.driver.pulsar.config.PulsarConfig; + import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; @@ -36,6 +37,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; + import org.apache.bookkeeper.stats.StatsLogger; import org.apache.pulsar.client.admin.PulsarAdmin; import org.apache.pulsar.client.admin.PulsarAdminBuilder; @@ -124,7 +126,9 @@ public void initialize(File configurationFile, StatsLogger statsLogger) throws I .batchingMaxBytes(config.producer.batchingMaxBytes) .blockIfQueueFull(config.producer.blockIfQueueFull) .sendTimeout(0, TimeUnit.MILLISECONDS) - .maxPendingMessages(config.producer.pendingQueueSize); + .maxPendingMessages(config.producer.pendingQueueSize) + .roundRobinRouterBatchingPartitionSwitchFrequency( + config.producer.batchingPartitionSwitchFrequencyByPublishDelay); try { // Create namespace and set the configuration @@ -234,7 +238,7 @@ CompletableFuture> createInternalConsumer( .topic(topic) .subscriptionName(subscriptionName) .receiverQueueSize(config.consumer.receiverQueueSize) - .maxTotalReceiverQueueSizeAcrossPartitions(Integer.MAX_VALUE) + .maxTotalReceiverQueueSizeAcrossPartitions(config.consumer.maxTotalReceiverQueueSizeAcrossPartitions) .poolMessages(true) .subscribeAsync(); } diff --git a/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/config/PulsarConsumerConfig.java b/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/config/PulsarConsumerConfig.java index d3ac54902..fb32ec6d0 100644 --- a/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/config/PulsarConsumerConfig.java +++ b/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/config/PulsarConsumerConfig.java @@ -20,4 +20,5 @@ public class PulsarConsumerConfig { public int receiverQueueSize = 10000; public SubscriptionType subscriptionType = SubscriptionType.Failover; + public int maxTotalReceiverQueueSizeAcrossPartitions = Integer.MAX_VALUE; } diff --git a/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/config/PulsarProducerConfig.java b/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/config/PulsarProducerConfig.java index 0cfa555f4..398f56558 100644 --- a/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/config/PulsarProducerConfig.java +++ b/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/config/PulsarProducerConfig.java @@ -19,4 +19,5 @@ public class PulsarProducerConfig { public int batchingMaxBytes = 1024 * 1024; public boolean blockIfQueueFull = true; public int pendingQueueSize = 0; + public int batchingPartitionSwitchFrequencyByPublishDelay = 10; } diff --git a/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml new file mode 100644 index 000000000..5612695cd --- /dev/null +++ b/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-1-partition-1p-1c-100b + +topics: 1 +partitionsPerTopic: 1 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml new file mode 100644 index 000000000..ad5780aaa --- /dev/null +++ b/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-1-partition-1p-1c-1kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 100 +payloadFile: "payload/payload-1kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml new file mode 100644 index 000000000..ba9a08415 --- /dev/null +++ b/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-1-partition-1p-1c-64kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml new file mode 100644 index 000000000..d4e45c526 --- /dev/null +++ b/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-16-partition-1p-1c-100b + +topics: 1 +partitionsPerTopic: 16 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml new file mode 100644 index 000000000..dba4a5224 --- /dev/null +++ b/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-16-partition-1p-1c-1kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 1024 +payloadFile: "payload/payload-1kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml new file mode 100644 index 000000000..f6e8e4aca --- /dev/null +++ b/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-16-partition-1p-1c-64kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml new file mode 100644 index 000000000..a5dbf7e6e --- /dev/null +++ b/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-512-partition-4p-4c-100b + +topics: 1 +partitionsPerTopic: 512 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml new file mode 100644 index 000000000..7501a3fe0 --- /dev/null +++ b/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-512-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 1024 +payloadFile: "payload/payload-1kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml new file mode 100644 index 000000000..014bdfa92 --- /dev/null +++ b/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-512-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml new file mode 100644 index 000000000..84a8f55fd --- /dev/null +++ b/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-64-partition-4p-4c-100b + +topics: 1 +partitionsPerTopic: 64 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml new file mode 100644 index 000000000..ed18d72d7 --- /dev/null +++ b/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-64-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 1024 +payloadFile: "payload/payload-1kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml new file mode 100644 index 000000000..5c27189eb --- /dev/null +++ b/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-64-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 From 946153ec991720b0a63f4b843fd9892b1fd146b1 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Sun, 14 Jul 2024 22:47:43 +0800 Subject: [PATCH 02/29] add referenced docs --- doc/performance_test.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/doc/performance_test.md b/doc/performance_test.md index 2bfe7bfe3..517e0c380 100644 --- a/doc/performance_test.md +++ b/doc/performance_test.md @@ -176,4 +176,9 @@ KoP, Pulsar, Kafka ## 8. 结果分析 -TODO \ No newline at end of file +TODO + +## 9. 参考文档 + +- [StreamNative: Kafka-Pulsar Performance Test Report](https://github.com/streamnative/openmessaging-benchmark/blob/master/blog/benchmarking-pulsar-kafka-a-more-accurate-perspective-on-pulsar-performance.pdf) +- [Confluent: Kafka fastest messaging system](https://www.confluent.io/blog/kafka-fastest-messaging-system/) \ No newline at end of file From 9dcae0b24423d1cf7281a1c4aa8b40ade222ce6c Mon Sep 17 00:00:00 2001 From: dao-jun Date: Mon, 15 Jul 2024 10:10:47 +0800 Subject: [PATCH 03/29] improve docs --- doc/performance_test.md | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/doc/performance_test.md b/doc/performance_test.md index 517e0c380..20b993335 100644 --- a/doc/performance_test.md +++ b/doc/performance_test.md @@ -41,6 +41,20 @@ KoP, Pulsar, Kafka ## 5. 相关核心配置 +- Durability Level + - KoP/Pulsar: + - Replication: SYNC(ensemble=3, writeQuorum=3, ackQuorum=2) + - Bookkeeper(ASYNC): + - Enable journaling + - journalWriteData=true + - journalSyncData=false + - Disable journaling + - journalWriteData=false + - journalSyncData=false + - Kafka: + - Replication: SYNC(ack=all, min.insync.replicas=2) + - Log: ASYNC(log.flush.interval.messages=10000, log.flush.interval.ms=1000) + - Pulsar - Broker.conf ```properties @@ -133,43 +147,28 @@ KoP, Pulsar, Kafka - 场景1 - Pulsar - Enable journaling - - Publish Throughput: - - Consume Throughput: - - Publish Latency: - - End-to-End Latency: + - Benchmark result: - CPU: - Memory: - Disk: - Disable journaling - - Publish Throughput: - - Consume Throughput: - - Publish Latency: - - End-to-End Latency: + - Benchmark result: - CPU: - Memory: - Disk: - KoP - Enable journaling - - Publish Throughput: - - Consume Throughput: - - Publish Latency: - - End-to-End Latency: + - Benchmark result: - CPU: - Memory: - Disk: - Disable journaling - - Publish Throughput: - - Consume Throughput: - - Publish Latency: - - End-to-End Latency: + - Benchmark result: - CPU: - Memory: - Disk: - Kafka - - Publish Throughput: - - Consume Throughput: - - Publish Latency: - - End-to-End Latency: + - Benchmark result: - CPU: - Memory: - Disk: From 52f488c33ebe2c921c28008d087e001f3b2d4ef1 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Tue, 16 Jul 2024 17:45:03 +0800 Subject: [PATCH 04/29] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/performance_test.md | 53 ++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/doc/performance_test.md b/doc/performance_test.md index 20b993335..99b697fd4 100644 --- a/doc/performance_test.md +++ b/doc/performance_test.md @@ -2,7 +2,7 @@ ## 1. 测试范围 -KoP, Pulsar, Kafka +KoP, Pulsar, Kafka, KoP Proxy ## 2. 测试工具 @@ -18,7 +18,7 @@ KoP, Pulsar, Kafka - 软件配置 - OS: CentOS 7.9 - Java: Oracle JDK 17 - - Pulsar: 2.10.6 + - Pulsar: [2.10.7.1](https://github.com/ascentstream/pulsar/releases/tag/v2.10.7.1) - Kafka: 3.4.1 - KoP: [2.10.7.1](https://github.com/ascentstream/asp-kop/releases/tag/v2.10.7.1) - Bookkeeper: 4.14.8 @@ -42,18 +42,33 @@ KoP, Pulsar, Kafka ## 5. 相关核心配置 - Durability Level - - KoP/Pulsar: - - Replication: SYNC(ensemble=3, writeQuorum=3, ackQuorum=2) - - Bookkeeper(ASYNC): - - Enable journaling - - journalWriteData=true - - journalSyncData=false - - Disable journaling - - journalWriteData=false - - journalSyncData=false - - Kafka: - - Replication: SYNC(ack=all, min.insync.replicas=2) - - Log: ASYNC(log.flush.interval.messages=10000, log.flush.interval.ms=1000) + - Level1: + - KoP/Pulsar: + - Replication: SYNC(ensemble=3, writeQuorum=3, ackQuorum=2) + - Bookkeeper(ASYNC): + - Enable journaling + - journalWriteData=true + - journalSyncData=false + - Disable journaling + - journalWriteData=false + - journalSyncData=false + - Kafka: + - Replication: SYNC(ack=all, min.insync.replicas=2) + - Log: ASYNC(log.flush.interval.messages=10000, log.flush.interval.ms=1000) + + - Level2: + - KoP/Pulsar: + - Replication: ASYNC(ensemble=3, writeQuorum=3, ackQuorum=1) + - Bookkeeper(ASYNC): + - Enable journaling + - journalWriteData=true + - journalSyncData=false + - Disable journaling + - journalWriteData=false + - journalSyncData=false + - Kafka: + - Replication: ASYNC(ack=1, min.insync.replicas=2) + - Log: ASYNC(log.flush.interval.messages=10000, log.flush.interval.ms=1000) - Pulsar - Broker.conf @@ -76,11 +91,11 @@ KoP, Pulsar, Kafka ``` - Broker JVM options ```text - -Xmx8G -Xms8G -XX:MaxDirectMemorySize=8G + -Xmx6G -Xms6G -XX:MaxDirectMemorySize=6G ``` - Bookkeeper JVM options ```text - -Xmx8G -Xms8G -XX:MaxDirectMemorySize=8G + -Xmx6G -Xms6G -XX:MaxDirectMemorySize=6G ``` - Client Settings ```properties @@ -101,7 +116,7 @@ KoP, Pulsar, Kafka ``` - Broker JVM options ```text - -Xmx16G -Xms16G -XX:MaxDirectMemorySize=8G + -Xmx12G -Xms12G -XX:MaxDirectMemorySize=12G ``` - Benchmark - Driver config @@ -128,6 +143,10 @@ KoP, Pulsar, Kafka | 11 | 1 | 512 | 16 | 1 | 16 | 1KB | [1-topic-512-partition-16p-16c-1kb](../workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml) | | 12 | 1 | 512 | 16 | 1 | 16 | 64KB | [1-topic-512-partition-16p-16c-64kb](../workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml) | +- 后续规划 + +增加Catch-up read测试 + - 测试步骤 - 启动Pulsar/KoP/Kafka集群 - 启动benchmark driver From 38a0c668014a12197c041b19a7676bdf17a008fa Mon Sep 17 00:00:00 2001 From: dao-jun Date: Tue, 23 Jul 2024 23:23:37 +0800 Subject: [PATCH 05/29] =?UTF-8?q?=E8=B0=83=E6=95=B4workload=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- driver-kop/kafka_to_kafka_asp_perf.yaml | 4 ++-- driver-pulsar/pulsar_asp_perf.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/driver-kop/kafka_to_kafka_asp_perf.yaml b/driver-kop/kafka_to_kafka_asp_perf.yaml index abb08208f..750a2e46f 100644 --- a/driver-kop/kafka_to_kafka_asp_perf.yaml +++ b/driver-kop/kafka_to_kafka_asp_perf.yaml @@ -20,7 +20,7 @@ consumerType: kafka # Pulsar configs pulsarConfig: - serviceUrl: pulsar://localhost:6650 + serviceUrl: pulsar://192.168.0.58:6650 # producer configs batchingEnabled: true batchingMaxPublishDelayMs: 1 @@ -39,7 +39,7 @@ pulsarConfig: # Kafka configs kafkaConfig: | - bootstrap.servers=localhost:9092 + bootstrap.servers=192.168.0.58:9092 acks=all linger.ms=10 batch.size=1048576 diff --git a/driver-pulsar/pulsar_asp_perf.yaml b/driver-pulsar/pulsar_asp_perf.yaml index 6e9f71a91..06934b275 100644 --- a/driver-pulsar/pulsar_asp_perf.yaml +++ b/driver-pulsar/pulsar_asp_perf.yaml @@ -17,8 +17,8 @@ driverClass: io.openmessaging.benchmark.driver.pulsar.PulsarBenchmarkDriver # Pulsar client-specific configuration client: - serviceUrl: pulsar://localhost:6650 - httpUrl: http://localhost:8080 + serviceUrl: pulsar://192.168.0.58:6650 + httpUrl: http://192.168.0.58:8080 ioThreads: 16 connectionsPerBroker: 8 clusterName: local From 5422c5619a122f2489c9139a31dda64f776a98ca Mon Sep 17 00:00:00 2001 From: dao-jun Date: Tue, 23 Jul 2024 23:27:22 +0800 Subject: [PATCH 06/29] =?UTF-8?q?=E8=B0=83=E6=95=B4benchmark=20worker=20JV?= =?UTF-8?q?M=20heap=20opts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/benchmark | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/benchmark b/bin/benchmark index 555893496..b263a705f 100755 --- a/bin/benchmark +++ b/bin/benchmark @@ -21,7 +21,7 @@ fi if [ -z "$HEAP_OPTS" ] then - HEAP_OPTS="-Xms4G -Xmx4G" + HEAP_OPTS="-Xms16G -Xmx16G" fi JVM_MEM="${HEAP_OPTS} -XX:+UseG1GC" From 1d8851474efbb1339c9306acdc323240e93d714b Mon Sep 17 00:00:00 2001 From: dao-jun Date: Tue, 23 Jul 2024 23:35:31 +0800 Subject: [PATCH 07/29] fix checkstyle --- doc/performance_test.md | 271 +++++++++--------- .../driver/kop/KopBenchmarkDriver.java | 14 +- .../driver/kop/config/PulsarConfig.java | 1 - .../driver/pulsar/PulsarBenchmarkDriver.java | 5 +- 4 files changed, 148 insertions(+), 143 deletions(-) diff --git a/doc/performance_test.md b/doc/performance_test.md index 99b697fd4..ae94e044c 100644 --- a/doc/performance_test.md +++ b/doc/performance_test.md @@ -11,124 +11,129 @@ KoP, Pulsar, Kafka, KoP Proxy ## 3. 测试环境 - 硬件配置 - - CPU: VCPU 4 - - Memory: 32GB - - 网络: 1Gbps - - 磁盘: 1TB SSD * 2 (Read: MB/s, Write: MB/s) + - CPU: VCPU 4 + - Memory: 32GB + - 网络: 1Gbps + - 磁盘: 1TB SSD * 2 (Read: MB/s, Write: MB/s) - 软件配置 - - OS: CentOS 7.9 - - Java: Oracle JDK 17 - - Pulsar: [2.10.7.1](https://github.com/ascentstream/pulsar/releases/tag/v2.10.7.1) - - Kafka: 3.4.1 - - KoP: [2.10.7.1](https://github.com/ascentstream/asp-kop/releases/tag/v2.10.7.1) - - Bookkeeper: 4.14.8 - - Zookeeper: 3.9.2 - - [OpenMessaging benchmark](https://github.com/ascentstream/benchmark) 0.0.1 + - OS: CentOS 7.9 + - Java: Oracle JDK 17 + - Pulsar: [2.10.7.1](https://github.com/ascentstream/pulsar/releases/tag/v2.10.7.1) + - Kafka: 3.4.1 + - KoP: [2.10.7.1](https://github.com/ascentstream/asp-kop/releases/tag/v2.10.7.1) + - Bookkeeper: 4.14.8 + - Zookeeper: 3.9.2 + - [OpenMessaging benchmark](https://github.com/ascentstream/benchmark) 0.0.1 ## 4. 测试部署 - 硬件需求 - - 5台机器,每台机器配置[如上](#3-测试环境) - + - 5台机器,每台机器配置[如上](#3-测试环境) - 部署方式 - - Pulsar/KoP + - Pulsar/KoP ![pulsar.png](./Pulsar_KoP.png) - - Kafka + - Kafka ![kafka.png](./kafka.png) ## 5. 相关核心配置 - Durability Level - - Level1: - - KoP/Pulsar: - - Replication: SYNC(ensemble=3, writeQuorum=3, ackQuorum=2) - - Bookkeeper(ASYNC): - - Enable journaling - - journalWriteData=true - - journalSyncData=false - - Disable journaling - - journalWriteData=false - - journalSyncData=false - - Kafka: - - Replication: SYNC(ack=all, min.insync.replicas=2) - - Log: ASYNC(log.flush.interval.messages=10000, log.flush.interval.ms=1000) - - - Level2: - - KoP/Pulsar: - - Replication: ASYNC(ensemble=3, writeQuorum=3, ackQuorum=1) - - Bookkeeper(ASYNC): - - Enable journaling - - journalWriteData=true - - journalSyncData=false - - Disable journaling - - journalWriteData=false - - journalSyncData=false - - Kafka: - - Replication: ASYNC(ack=1, min.insync.replicas=2) - - Log: ASYNC(log.flush.interval.messages=10000, log.flush.interval.ms=1000) - + - Level1: + - KoP/Pulsar: + - Replication: SYNC(ensemble=3, writeQuorum=3, ackQuorum=2) + - Bookkeeper(ASYNC): + - Enable journaling + - journalWriteData=true + - journalSyncData=false + - Disable journaling + - journalWriteData=false + - journalSyncData=false + - Kafka: + - Replication: SYNC(ack=all, min.insync.replicas=2) + - Log: ASYNC(log.flush.interval.messages=10000, log.flush.interval.ms=1000) + - Level2: + - KoP/Pulsar: + - Replication: ASYNC(ensemble=3, writeQuorum=3, ackQuorum=1) + - Bookkeeper(ASYNC): + - Enable journaling + - journalWriteData=true + - journalSyncData=false + - Disable journaling + - journalWriteData=false + - journalSyncData=false + - Kafka: + - Replication: ASYNC(ack=1, min.insync.replicas=2) + - Log: ASYNC(log.flush.interval.messages=10000, log.flush.interval.ms=1000) - Pulsar - - Broker.conf - ```properties - managedLedgerNewEntriesCheckDelayInMillis=0 - bookkeeperNumberOfChannelsPerBookie=64 - - # use sync replication mode - managedLedgerDefaultEnsembleSize=3 - managedLedgerDefaultWriteQuorum=3 - managedLedgerDefaultAckQuorum=2 - ``` - - Bookkeeper.conf - ```properties - journalPageCacheFlushIntervalMSec=1000 - - # disable/enable journaling - journalWriteData=false/true - journalSyncData=false - ``` - - Broker JVM options - ```text - -Xmx6G -Xms6G -XX:MaxDirectMemorySize=6G - ``` - - Bookkeeper JVM options - ```text - -Xmx6G -Xms6G -XX:MaxDirectMemorySize=6G - ``` - - Client Settings - ```properties - # Producer - batchingPartitionSwitchFrequencyByPublishDelay=2 - # Consumer - maxTotalReceiverQueueSizeAcrossPartitions=5000000 - ``` + - Broker.conf + + ```properties + managedLedgerNewEntriesCheckDelayInMillis=0 + bookkeeperNumberOfChannelsPerBookie=64 + + # use sync replication mode + managedLedgerDefaultEnsembleSize=3 + managedLedgerDefaultWriteQuorum=3 + managedLedgerDefaultAckQuorum=2 + ``` + - Bookkeeper.conf + + ```properties + journalPageCacheFlushIntervalMSec=1000 + + # disable/enable journaling + journalWriteData=false/true + journalSyncData=false + ``` + - Broker JVM options + + ```text + -Xmx6G -Xms6G -XX:MaxDirectMemorySize=6G + ``` + - Bookkeeper JVM options + + ```text + -Xmx6G -Xms6G -XX:MaxDirectMemorySize=6G + ``` + - Client Settings + + ```properties + # Producer + batchingPartitionSwitchFrequencyByPublishDelay=2 + # Consumer + maxTotalReceiverQueueSizeAcrossPartitions=5000000 + ``` - KoP - - 基本设置如Pulsar - - KoP设置 - ```properties - entryFormat=kafka - ``` + - 基本设置如Pulsar + - KoP设置 + + ```properties + entryFormat=kafka + ``` - Kafka - - Broker.conf - ```properties - ``` - - Broker JVM options - ```text - -Xmx12G -Xms12G -XX:MaxDirectMemorySize=12G - ``` + - Broker.conf + + ```properties + ``` + - Broker JVM options + + ```text + -Xmx12G -Xms12G -XX:MaxDirectMemorySize=12G + ``` - Benchmark - - Driver config - - [Pulsar](../driver-pulsar/pulsar_asp_perf.yaml) - - [KoP](../driver-kop/kafka_to_kafka_asp_perf.yaml) - - [Kafka](../driver-kafka/kafka-ack-all-nofsync.yaml) + - Driver config + - [Pulsar](../driver-pulsar/pulsar_asp_perf.yaml) + - [KoP](../driver-kop/kafka_to_kafka_asp_perf.yaml) + - [Kafka](../driver-kafka/kafka-ack-all-nofsync.yaml) ## 6. 测试场景 - 场景 -| 场景 | Topics | Partitions per topic | Producers | Subscriptions | Consumers per subscription | Message Size | Workload | +| 场景 | Topics | Partitions per topic | Producers | Subscriptions | Consumers per subscription | Message Size | Workload | |----|--------|----------------------|-----------|---------------|----------------------------|--------------|----------------------------------------------------------------------------------------------------------------------| | 1 | 1 | 1 | 1 | 1 | 1 | 100B | [1-topic-1-partition-1p-1c-100b](../workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml) | | 2 | 1 | 1 | 1 | 1 | 1 | 1KB | [1-topic-1-partition-1p-1c-1kb](../workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml) | @@ -148,49 +153,48 @@ KoP, Pulsar, Kafka, KoP Proxy 增加Catch-up read测试 - 测试步骤 - - 启动Pulsar/KoP/Kafka集群 - - 启动benchmark driver - - 运行测试场景 - - 结果分析 - + - 启动Pulsar/KoP/Kafka集群 + - 启动benchmark driver + - 运行测试场景 + - 结果分析 - 关注指标 - - 吞吐量 - - Publish Throughput(Message, Byte) - - Consume Throughput(Message, Byte) - - 延迟: - - Publish Latency(AVG, MAX, P90, P99, P999) - - End-to-End Latency(AVG, MAX, P90, P99, P999) + - 吞吐量 + - Publish Throughput(Message, Byte) + - Consume Throughput(Message, Byte) + - 延迟: + - Publish Latency(AVG, MAX, P90, P99, P999) + - End-to-End Latency(AVG, MAX, P90, P99, P999) ## 7. 测试数据 - 场景1 - - Pulsar - - Enable journaling - - Benchmark result: - - CPU: - - Memory: - - Disk: - - Disable journaling - - Benchmark result: - - CPU: - - Memory: - - Disk: - - KoP - - Enable journaling - - Benchmark result: - - CPU: - - Memory: - - Disk: - - Disable journaling - - Benchmark result: - - CPU: - - Memory: - - Disk: - - Kafka - - Benchmark result: - - CPU: - - Memory: - - Disk: + - Pulsar + - Enable journaling + - Benchmark result: + - CPU: + - Memory: + - Disk: + - Disable journaling + - Benchmark result: + - CPU: + - Memory: + - Disk: + - KoP + - Enable journaling + - Benchmark result: + - CPU: + - Memory: + - Disk: + - Disable journaling + - Benchmark result: + - CPU: + - Memory: + - Disk: + - Kafka + - Benchmark result: + - CPU: + - Memory: + - Disk: ## 8. 结果分析 @@ -199,4 +203,5 @@ TODO ## 9. 参考文档 - [StreamNative: Kafka-Pulsar Performance Test Report](https://github.com/streamnative/openmessaging-benchmark/blob/master/blog/benchmarking-pulsar-kafka-a-more-accurate-perspective-on-pulsar-performance.pdf) -- [Confluent: Kafka fastest messaging system](https://www.confluent.io/blog/kafka-fastest-messaging-system/) \ No newline at end of file +- [Confluent: Kafka fastest messaging system](https://www.confluent.io/blog/kafka-fastest-messaging-system/) + diff --git a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java index d7114af3d..34955467b 100644 --- a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java +++ b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java @@ -52,7 +52,6 @@ import org.apache.kafka.common.serialization.StringDeserializer; import org.apache.kafka.common.serialization.StringSerializer; import org.apache.pulsar.client.admin.PulsarAdmin; -import org.apache.pulsar.client.admin.PulsarAdminException; import org.apache.pulsar.client.api.Consumer; import org.apache.pulsar.client.api.ConsumerBuilder; import org.apache.pulsar.client.api.ProducerBuilder; @@ -106,13 +105,16 @@ public void initialize(File configurationFile, StatsLogger statsLogger) throws I final PulsarConfig pulsarConfig = config.pulsarConfig; - try (PulsarAdmin admin1 = PulsarAdmin.builder().serviceHttpUrl(pulsarConfig.serviceUrl).build()) { + try (PulsarAdmin admin1 = + PulsarAdmin.builder().serviceHttpUrl(pulsarConfig.serviceUrl).build()) { // Set namespace policies PulsarConfig.PersistentConfig pc = pulsarConfig.persistent; - admin1.namespaces().setDeduplicationStatus( - "public/default", pc.deduplicationEnabled); - admin1.namespaces().setPersistence("public/default", new - PersistencePolicies(pc.ensembleSize, pc.writeQuorumSize, pc.ackQuorumSize, 1.0)); + admin1.namespaces().setDeduplicationStatus("public/default", pc.deduplicationEnabled); + admin1 + .namespaces() + .setPersistence( + "public/default", + new PersistencePolicies(pc.ensembleSize, pc.writeQuorumSize, pc.ackQuorumSize, 1.0)); } catch (Throwable ex) { log.error("Failed to connect to Pulsar service at {}", pulsarConfig.serviceUrl, ex); throw new RuntimeException(ex); diff --git a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java index 438ae8af1..d4b190cce 100644 --- a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java +++ b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java @@ -31,7 +31,6 @@ public class PulsarConfig { public PersistentConfig persistent = new PersistentConfig(); - public static class PersistentConfig { public int ensembleSize = 3; public int writeQuorumSize = 3; diff --git a/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java b/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java index cabcb2003..c4f02a5ae 100644 --- a/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java +++ b/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java @@ -26,7 +26,6 @@ import io.openmessaging.benchmark.driver.ConsumerCallback; import io.openmessaging.benchmark.driver.pulsar.config.PulsarClientConfig.PersistenceConfiguration; import io.openmessaging.benchmark.driver.pulsar.config.PulsarConfig; - import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; @@ -37,7 +36,6 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; - import org.apache.bookkeeper.stats.StatsLogger; import org.apache.pulsar.client.admin.PulsarAdmin; import org.apache.pulsar.client.admin.PulsarAdminBuilder; @@ -238,7 +236,8 @@ CompletableFuture> createInternalConsumer( .topic(topic) .subscriptionName(subscriptionName) .receiverQueueSize(config.consumer.receiverQueueSize) - .maxTotalReceiverQueueSizeAcrossPartitions(config.consumer.maxTotalReceiverQueueSizeAcrossPartitions) + .maxTotalReceiverQueueSizeAcrossPartitions( + config.consumer.maxTotalReceiverQueueSizeAcrossPartitions) .poolMessages(true) .subscribeAsync(); } From 7dc91ac8868a48f17bdaf2fae3365b741e2e7e03 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Tue, 23 Jul 2024 23:45:30 +0800 Subject: [PATCH 08/29] fix checkstyle --- driver-kafka/kafka-ack-all-nofsync.yaml | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/driver-kafka/kafka-ack-all-nofsync.yaml b/driver-kafka/kafka-ack-all-nofsync.yaml index 706477560..77398d5b9 100644 --- a/driver-kafka/kafka-ack-all-nofsync.yaml +++ b/driver-kafka/kafka-ack-all-nofsync.yaml @@ -1,20 +1,15 @@ # -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. # name: Kafka From 5f14727c00872cd1ca85b2bb0cca35b351e56d20 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Wed, 24 Jul 2024 00:09:37 +0800 Subject: [PATCH 09/29] fix pulsar driver --- driver-pulsar/pulsar_asp_perf.yaml | 2 +- .../benchmark/driver/pulsar/PulsarBenchmarkDriver.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/driver-pulsar/pulsar_asp_perf.yaml b/driver-pulsar/pulsar_asp_perf.yaml index 06934b275..ae4601b8a 100644 --- a/driver-pulsar/pulsar_asp_perf.yaml +++ b/driver-pulsar/pulsar_asp_perf.yaml @@ -34,7 +34,7 @@ client: tlsTrustCertsFilePath: authentication: plugin: - data: + data: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.uHMshd2yCvUPTrq7RQDkrzkl_fyyrAE7y_WxGaoCLgA # Producer configuration producer: diff --git a/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java b/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java index c4f02a5ae..d4cb0b7bd 100644 --- a/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java +++ b/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java @@ -189,7 +189,7 @@ public String getTopicNamePrefix() { public CompletableFuture createTopic(String topic, int partitions) { if (partitions == 1) { // No-op - return CompletableFuture.completedFuture(null); + return adminClient.topics().createNonPartitionedTopicAsync(topic); } return adminClient.topics().createPartitionedTopicAsync(topic, partitions); From 64a0eea2fd6cc1553a0bdd214fb64d7f26cfc6c9 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Wed, 24 Jul 2024 00:13:13 +0800 Subject: [PATCH 10/29] fix pulsar driver --- driver-pulsar/pulsar_asp_perf.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/driver-pulsar/pulsar_asp_perf.yaml b/driver-pulsar/pulsar_asp_perf.yaml index ae4601b8a..091dd6eab 100644 --- a/driver-pulsar/pulsar_asp_perf.yaml +++ b/driver-pulsar/pulsar_asp_perf.yaml @@ -21,7 +21,7 @@ client: httpUrl: http://192.168.0.58:8080 ioThreads: 16 connectionsPerBroker: 8 - clusterName: local + clusterName: kop-performance-test namespacePrefix: benchmark/ns topicType: persistent persistence: @@ -33,7 +33,7 @@ client: tlsEnableHostnameVerification: false tlsTrustCertsFilePath: authentication: - plugin: + plugin: org.apache.pulsar.client.impl.auth.AuthenticationToken data: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.uHMshd2yCvUPTrq7RQDkrzkl_fyyrAE7y_WxGaoCLgA # Producer configuration @@ -48,4 +48,4 @@ producer: consumer: receiverQueueSize: 10000 subscriptionType: Failover - maxTotalReceiverQueueSizeAcrossPartitions: 5000000 + maxTotalReceiverQueueSizeAcrossPartitions: 5000000 \ No newline at end of file From 46168d65543e85e7988479fe6e02af2032204a08 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Wed, 24 Jul 2024 00:24:10 +0800 Subject: [PATCH 11/29] fix pulsar driver --- .../asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml | 2 +- .../1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml | 2 +- .../1-topic-512-partition-16p-16c-1kb.yaml | 2 +- .../1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml index ad5780aaa..70896373b 100644 --- a/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml +++ b/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml @@ -17,7 +17,7 @@ name: max-rate-1-topic-1-partition-1p-1c-1kb topics: 1 partitionsPerTopic: 1 messageSize: 100 -payloadFile: "payload/payload-1kb.data" +payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 diff --git a/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml index dba4a5224..214e61837 100644 --- a/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml +++ b/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml @@ -17,7 +17,7 @@ name: max-rate-1-topic-16-partition-1p-1c-1kb topics: 1 partitionsPerTopic: 16 messageSize: 1024 -payloadFile: "payload/payload-1kb.data" +payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 diff --git a/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml index 7501a3fe0..e43095517 100644 --- a/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml @@ -17,7 +17,7 @@ name: max-rate-1-topic-512-partition-4p-4c-1kb topics: 1 partitionsPerTopic: 512 messageSize: 1024 -payloadFile: "payload/payload-1kb.data" +payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 4 producersPerTopic: 4 diff --git a/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml index ed18d72d7..824d1ac06 100644 --- a/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml +++ b/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml @@ -17,7 +17,7 @@ name: max-rate-1-topic-64-partition-4p-4c-1kb topics: 1 partitionsPerTopic: 64 messageSize: 1024 -payloadFile: "payload/payload-1kb.data" +payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 4 producersPerTopic: 4 From 6cab908a81cf910d74766ed16540cac063d47148 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Wed, 24 Jul 2024 00:27:07 +0800 Subject: [PATCH 12/29] fix pulsar driver --- .../asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml index 70896373b..b01a568bf 100644 --- a/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml +++ b/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml @@ -16,7 +16,7 @@ name: max-rate-1-topic-1-partition-1p-1c-1kb topics: 1 partitionsPerTopic: 1 -messageSize: 100 +messageSize: 1024 payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 From 204d931543e5e1a63513b9ca442b413883f49bf3 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Wed, 24 Jul 2024 10:49:51 +0800 Subject: [PATCH 13/29] adjust params --- payload/payload-64kb.data | 1 + .../1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 payload/payload-64kb.data diff --git a/payload/payload-64kb.data b/payload/payload-64kb.data new file mode 100644 index 000000000..cd65b6f8e --- /dev/null +++ b/payload/payload-64kb.data @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml index 5612695cd..8f12f92cb 100644 --- a/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml +++ b/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: max-rate-1-topic-1-partition-1p-1c-100b +name: 20k-1-topic-1-partition-1p-1c-100b topics: 1 partitionsPerTopic: 1 @@ -21,7 +21,7 @@ payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 -producerRate: 10000000 +producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 From 0729c979098f6d6575a905934aabd2c80625ee09 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Wed, 24 Jul 2024 14:50:06 +0800 Subject: [PATCH 14/29] Add 100k,200k,500k tests workload conf --- doc/performance_test.md | 24 ++++++++--------- .../1-topic-1-partition-1p-1c-100b.yaml | 4 +-- .../1-topic-1-partition-1p-1c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-1-partition-1p-1c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-16-partition-1p-1c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-16-partition-1p-1c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-16-partition-1p-1c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-512-partition-16p-16c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-512-partition-16p-16c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-512-partition-16p-16c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-64-partition-4p-4c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-64-partition-4p-4c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-64-partition-4p-4c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-1-partition-1p-1c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-1-partition-1p-1c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-1-partition-1p-1c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-16-partition-1p-1c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-16-partition-1p-1c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-16-partition-1p-1c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-512-partition-16p-16c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-512-partition-16p-16c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-512-partition-16p-16c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-64-partition-4p-4c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-64-partition-4p-4c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-64-partition-4p-4c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-1-partition-1p-1c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-1-partition-1p-1c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-1-partition-1p-1c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-16-partition-1p-1c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-16-partition-1p-1c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-16-partition-1p-1c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-512-partition-16p-16c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-512-partition-16p-16c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-512-partition-16p-16c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-64-partition-4p-4c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-64-partition-4p-4c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-64-partition-4p-4c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-1-partition-1p-1c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-1-partition-1p-1c-1kb.yaml | 0 .../1-topic-1-partition-1p-1c-64kb.yaml | 0 .../1-topic-16-partition-1p-1c-100b.yaml | 0 .../1-topic-16-partition-1p-1c-1kb.yaml | 0 .../1-topic-16-partition-1p-1c-64kb.yaml | 0 .../1-topic-512-partition-16p-16c-100b.yaml | 0 .../1-topic-512-partition-16p-16c-1kb.yaml | 0 .../1-topic-512-partition-16p-16c-64kb.yaml | 0 .../1-topic-64-partition-4p-4c-100b.yaml | 0 .../1-topic-64-partition-4p-4c-1kb.yaml | 0 .../1-topic-64-partition-4p-4c-64kb.yaml | 0 49 files changed, 962 insertions(+), 14 deletions(-) rename workloads/asp/{ => 100k}/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml (92%) create mode 100644 workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml create mode 100644 workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml create mode 100644 workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml create mode 100644 workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml create mode 100644 workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml create mode 100644 workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml create mode 100644 workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml create mode 100644 workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml create mode 100644 workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml create mode 100644 workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml create mode 100644 workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml create mode 100644 workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml create mode 100644 workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml create mode 100644 workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml create mode 100644 workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml create mode 100644 workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml create mode 100644 workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml create mode 100644 workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml create mode 100644 workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml create mode 100644 workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml create mode 100644 workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml create mode 100644 workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml create mode 100644 workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml create mode 100644 workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml create mode 100644 workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml create mode 100644 workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml create mode 100644 workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml create mode 100644 workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml create mode 100644 workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml create mode 100644 workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml create mode 100644 workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml create mode 100644 workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml create mode 100644 workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml create mode 100644 workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml create mode 100644 workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml create mode 100644 workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml rename workloads/asp/{ => max}/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml (100%) rename workloads/asp/{ => max}/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml (100%) rename workloads/asp/{ => max}/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml (100%) rename workloads/asp/{ => max}/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml (100%) rename workloads/asp/{ => max}/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml (100%) rename workloads/asp/{ => max}/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml (100%) rename workloads/asp/{ => max}/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml (100%) rename workloads/asp/{ => max}/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml (100%) rename workloads/asp/{ => max}/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml (100%) rename workloads/asp/{ => max}/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml (100%) rename workloads/asp/{ => max}/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml (100%) diff --git a/doc/performance_test.md b/doc/performance_test.md index ae94e044c..0cdf2cdf5 100644 --- a/doc/performance_test.md +++ b/doc/performance_test.md @@ -135,18 +135,18 @@ KoP, Pulsar, Kafka, KoP Proxy | 场景 | Topics | Partitions per topic | Producers | Subscriptions | Consumers per subscription | Message Size | Workload | |----|--------|----------------------|-----------|---------------|----------------------------|--------------|----------------------------------------------------------------------------------------------------------------------| -| 1 | 1 | 1 | 1 | 1 | 1 | 100B | [1-topic-1-partition-1p-1c-100b](../workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml) | -| 2 | 1 | 1 | 1 | 1 | 1 | 1KB | [1-topic-1-partition-1p-1c-1kb](../workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml) | -| 3 | 1 | 1 | 1 | 1 | 1 | 64KB | [1-topic-1-partition-1p-1c-64kb](../workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml) | -| 4 | 1 | 16 | 1 | 1 | 1 | 100B | [1-topic-16-partition-1p-1c-100b](../workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml) | -| 5 | 1 | 16 | 1 | 1 | 1 | 1KB | [1-topic-16-partition-1p-1c-1kb](../workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml) | -| 6 | 1 | 16 | 1 | 1 | 1 | 64KB | [1-topic-16-partition-1p-1c-64kb](../workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml) | -| 7 | 1 | 64 | 4 | 1 | 4 | 100B | [1-topic-64-partition-4p-4c-100b](../workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml) | -| 8 | 1 | 64 | 4 | 1 | 4 | 1KB | [1-topic-64-partition-4p-4c-1kb](../workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml) | -| 9 | 1 | 64 | 4 | 1 | 4 | 64KB | [1-topic-64-partition-4p-4c-64kb](../workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml) | -| 10 | 1 | 512 | 16 | 1 | 16 | 100B | [1-topic-512-partition-16p-16c-100b](../workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml) | -| 11 | 1 | 512 | 16 | 1 | 16 | 1KB | [1-topic-512-partition-16p-16c-1kb](../workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml) | -| 12 | 1 | 512 | 16 | 1 | 16 | 64KB | [1-topic-512-partition-16p-16c-64kb](../workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml) | +| 1 | 1 | 1 | 1 | 1 | 1 | 100B | [1-topic-1-partition-1p-1c-100b](../workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml) | +| 2 | 1 | 1 | 1 | 1 | 1 | 1KB | [1-topic-1-partition-1p-1c-1kb](../workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml) | +| 3 | 1 | 1 | 1 | 1 | 1 | 64KB | [1-topic-1-partition-1p-1c-64kb](../workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml) | +| 4 | 1 | 16 | 1 | 1 | 1 | 100B | [1-topic-16-partition-1p-1c-100b](../workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml) | +| 5 | 1 | 16 | 1 | 1 | 1 | 1KB | [1-topic-16-partition-1p-1c-1kb](../workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml) | +| 6 | 1 | 16 | 1 | 1 | 1 | 64KB | [1-topic-16-partition-1p-1c-64kb](../workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml) | +| 7 | 1 | 64 | 4 | 1 | 4 | 100B | [1-topic-64-partition-4p-4c-100b](../workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml) | +| 8 | 1 | 64 | 4 | 1 | 4 | 1KB | [1-topic-64-partition-4p-4c-1kb](../workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml) | +| 9 | 1 | 64 | 4 | 1 | 4 | 64KB | [1-topic-64-partition-4p-4c-64kb](../workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml) | +| 10 | 1 | 512 | 16 | 1 | 16 | 100B | [1-topic-512-partition-16p-16c-100b](../workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml) | +| 11 | 1 | 512 | 16 | 1 | 16 | 1KB | [1-topic-512-partition-16p-16c-1kb](../workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml) | +| 12 | 1 | 512 | 16 | 1 | 16 | 64KB | [1-topic-512-partition-16p-16c-64kb](../workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml) | - 后续规划 diff --git a/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml similarity index 92% rename from workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml rename to workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml index 8f12f92cb..59225c523 100644 --- a/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml +++ b/workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 20k-1-topic-1-partition-1p-1c-100b +name: 100k-1-topic-1-partition-1p-1c-100b topics: 1 partitionsPerTopic: 1 @@ -21,7 +21,7 @@ payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 -producerRate: 20000 +producerRate: 100000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml new file mode 100644 index 000000000..e03db728d --- /dev/null +++ b/workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-1-partition-1p-1c-1kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml new file mode 100644 index 000000000..550074b27 --- /dev/null +++ b/workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-1-partition-1p-1c-64kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml new file mode 100644 index 000000000..cd15e0e9f --- /dev/null +++ b/workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-16-partition-1p-1c-100b + +topics: 1 +partitionsPerTopic: 16 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml new file mode 100644 index 000000000..048890dea --- /dev/null +++ b/workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-16-partition-1p-1c-1kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml new file mode 100644 index 000000000..e45c40349 --- /dev/null +++ b/workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-16-partition-1p-1c-64kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml new file mode 100644 index 000000000..cf00d1360 --- /dev/null +++ b/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-512-partition-4p-4c-100b + +topics: 1 +partitionsPerTopic: 512 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml new file mode 100644 index 000000000..618b53392 --- /dev/null +++ b/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-512-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml new file mode 100644 index 000000000..486beccd7 --- /dev/null +++ b/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-512-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml new file mode 100644 index 000000000..696df6163 --- /dev/null +++ b/workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-64-partition-4p-4c-100b + +topics: 1 +partitionsPerTopic: 64 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml new file mode 100644 index 000000000..b6484636c --- /dev/null +++ b/workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-64-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml new file mode 100644 index 000000000..c996debaf --- /dev/null +++ b/workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-64-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml new file mode 100644 index 000000000..e2dba3660 --- /dev/null +++ b/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 200k-1-topic-1-partition-1p-1c-100b + +topics: 1 +partitionsPerTopic: 1 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 200000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml new file mode 100644 index 000000000..686bd33fd --- /dev/null +++ b/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 200k-1-topic-1-partition-1p-1c-1kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 200000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml new file mode 100644 index 000000000..b82c31b97 --- /dev/null +++ b/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 200k-1-topic-1-partition-1p-1c-64kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 200000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml new file mode 100644 index 000000000..9885482ad --- /dev/null +++ b/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 200k-1-topic-16-partition-1p-1c-100b + +topics: 1 +partitionsPerTopic: 16 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 200000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml new file mode 100644 index 000000000..ff6e02ea2 --- /dev/null +++ b/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 200k-1-topic-16-partition-1p-1c-1kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 200000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml new file mode 100644 index 000000000..b73a7cf72 --- /dev/null +++ b/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 200k-1-topic-16-partition-1p-1c-64kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 200000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml new file mode 100644 index 000000000..d7f81563d --- /dev/null +++ b/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 200k-1-topic-512-partition-4p-4c-100b + +topics: 1 +partitionsPerTopic: 512 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 200000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml new file mode 100644 index 000000000..0806a57c0 --- /dev/null +++ b/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 200k-1-topic-512-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 200000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml new file mode 100644 index 000000000..44f4c0f3d --- /dev/null +++ b/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 200k-1-topic-512-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 200000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml new file mode 100644 index 000000000..cf0ac02d4 --- /dev/null +++ b/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 200k-1-topic-64-partition-4p-4c-100b + +topics: 1 +partitionsPerTopic: 64 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 200000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml new file mode 100644 index 000000000..473facad7 --- /dev/null +++ b/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 200k-1-topic-64-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 200000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml new file mode 100644 index 000000000..d5b9f96e0 --- /dev/null +++ b/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 200k-1-topic-64-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 200000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml new file mode 100644 index 000000000..14c61ae63 --- /dev/null +++ b/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 500k-1-topic-1-partition-1p-1c-100b + +topics: 1 +partitionsPerTopic: 1 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 500000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml new file mode 100644 index 000000000..16f96f8d4 --- /dev/null +++ b/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 500k-1-topic-1-partition-1p-1c-1kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 500000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml new file mode 100644 index 000000000..7284cfae0 --- /dev/null +++ b/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 500k-1-topic-1-partition-1p-1c-64kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 500000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml new file mode 100644 index 000000000..e087a688e --- /dev/null +++ b/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 500k-1-topic-16-partition-1p-1c-100b + +topics: 1 +partitionsPerTopic: 16 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 500000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml new file mode 100644 index 000000000..86c1eeb50 --- /dev/null +++ b/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 500k-1-topic-16-partition-1p-1c-1kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 500000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml new file mode 100644 index 000000000..246389bd5 --- /dev/null +++ b/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 500k-1-topic-16-partition-1p-1c-64kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 500000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml new file mode 100644 index 000000000..b552aa84c --- /dev/null +++ b/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 500k-1-topic-512-partition-4p-4c-100b + +topics: 1 +partitionsPerTopic: 512 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 500000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml new file mode 100644 index 000000000..583e221e0 --- /dev/null +++ b/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 500k-1-topic-512-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 500000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml new file mode 100644 index 000000000..dbbe954ab --- /dev/null +++ b/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 500k-1-topic-512-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 500000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml new file mode 100644 index 000000000..7be3353b1 --- /dev/null +++ b/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 500k-1-topic-64-partition-4p-4c-100b + +topics: 1 +partitionsPerTopic: 64 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 500000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml new file mode 100644 index 000000000..0bef5debd --- /dev/null +++ b/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 500k-1-topic-64-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 500000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml new file mode 100644 index 000000000..822ea3026 --- /dev/null +++ b/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 500k-1-topic-64-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 500000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml new file mode 100644 index 000000000..5612695cd --- /dev/null +++ b/workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-1-partition-1p-1c-100b + +topics: 1 +partitionsPerTopic: 1 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml similarity index 100% rename from workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml rename to workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml diff --git a/workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml similarity index 100% rename from workloads/asp/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml rename to workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml diff --git a/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml similarity index 100% rename from workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml rename to workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml diff --git a/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml similarity index 100% rename from workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml rename to workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml diff --git a/workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml similarity index 100% rename from workloads/asp/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml rename to workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml diff --git a/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml similarity index 100% rename from workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml rename to workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml diff --git a/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml similarity index 100% rename from workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml rename to workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml diff --git a/workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml similarity index 100% rename from workloads/asp/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml rename to workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml diff --git a/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml similarity index 100% rename from workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml rename to workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml diff --git a/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml similarity index 100% rename from workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml rename to workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml diff --git a/workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml similarity index 100% rename from workloads/asp/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml rename to workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml From b5827657f915c725060ffa6143f90b1819ef65c7 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Wed, 24 Jul 2024 15:00:54 +0800 Subject: [PATCH 15/29] fix checkstyle --- doc/performance_test.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/performance_test.md b/doc/performance_test.md index 0cdf2cdf5..b4a728cb8 100644 --- a/doc/performance_test.md +++ b/doc/performance_test.md @@ -133,8 +133,8 @@ KoP, Pulsar, Kafka, KoP Proxy - 场景 -| 场景 | Topics | Partitions per topic | Producers | Subscriptions | Consumers per subscription | Message Size | Workload | -|----|--------|----------------------|-----------|---------------|----------------------------|--------------|----------------------------------------------------------------------------------------------------------------------| +| 场景 | Topics | Partitions per topic | Producers | Subscriptions | Consumers per subscription | Message Size | Workload | +|----|--------|----------------------|-----------|---------------|----------------------------|--------------|--------------------------------------------------------------------------------------------------------------------------| | 1 | 1 | 1 | 1 | 1 | 1 | 100B | [1-topic-1-partition-1p-1c-100b](../workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml) | | 2 | 1 | 1 | 1 | 1 | 1 | 1KB | [1-topic-1-partition-1p-1c-1kb](../workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml) | | 3 | 1 | 1 | 1 | 1 | 1 | 64KB | [1-topic-1-partition-1p-1c-64kb](../workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml) | From 1ac0b58ada7c436c5187f97d7366b28c3fd914ef Mon Sep 17 00:00:00 2001 From: dao-jun Date: Wed, 24 Jul 2024 15:25:11 +0800 Subject: [PATCH 16/29] adjust benchmark workload files --- .../1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml | 4 ++-- .../1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml | 4 ++-- .../1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml | 4 ++-- .../1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml | 4 ++-- .../1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml | 4 ++-- .../1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml | 4 ++-- .../1-topic-512-partition-16p-16c-100b.yaml | 4 ++-- .../1-topic-512-partition-16p-16c-1kb.yaml | 4 ++-- .../1-topic-512-partition-16p-16c-64kb.yaml | 4 ++-- .../1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml | 4 ++-- .../1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml | 4 ++-- .../1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml | 4 ++-- .../1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml | 4 ++-- .../1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml | 4 ++-- .../1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml | 4 ++-- .../1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml | 4 ++-- .../1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml | 4 ++-- .../1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml | 4 ++-- .../1-topic-512-partition-16p-16c-100b.yaml | 4 ++-- .../1-topic-512-partition-16p-16c-1kb.yaml | 4 ++-- .../1-topic-512-partition-16p-16c-64kb.yaml | 4 ++-- .../1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml | 4 ++-- .../1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml | 4 ++-- .../1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml | 4 ++-- 24 files changed, 48 insertions(+), 48 deletions(-) rename workloads/asp/{200k => 20k}/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml (92%) rename workloads/asp/{500k => 20k}/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml (92%) rename workloads/asp/{500k => 20k}/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml (92%) rename workloads/asp/{500k => 20k}/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml (92%) rename workloads/asp/{200k => 20k}/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml (92%) rename workloads/asp/{500k => 20k}/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml (92%) rename workloads/asp/{500k => 20k}/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml (92%) rename workloads/asp/{200k => 20k}/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml (92%) rename workloads/asp/{200k => 20k}/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml (92%) rename workloads/asp/{200k => 20k}/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml (92%) rename workloads/asp/{500k => 20k}/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml (92%) rename workloads/asp/{500k => 20k}/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml (92%) rename workloads/asp/{500k => 50k}/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml (92%) rename workloads/asp/{200k => 50k}/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml (92%) rename workloads/asp/{200k => 50k}/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml (92%) rename workloads/asp/{200k => 50k}/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml (92%) rename workloads/asp/{500k => 50k}/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml (92%) rename workloads/asp/{200k => 50k}/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml (92%) rename workloads/asp/{200k => 50k}/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml (92%) rename workloads/asp/{500k => 50k}/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml (92%) rename workloads/asp/{500k => 50k}/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml (92%) rename workloads/asp/{500k => 50k}/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml (92%) rename workloads/asp/{200k => 50k}/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml (92%) rename workloads/asp/{200k => 50k}/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml (92%) diff --git a/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml similarity index 92% rename from workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml rename to workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml index e2dba3660..8f12f92cb 100644 --- a/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml +++ b/workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 200k-1-topic-1-partition-1p-1c-100b +name: 20k-1-topic-1-partition-1p-1c-100b topics: 1 partitionsPerTopic: 1 @@ -21,7 +21,7 @@ payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 -producerRate: 200000 +producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml similarity index 92% rename from workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml rename to workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml index 16f96f8d4..b18343b55 100644 --- a/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml +++ b/workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 500k-1-topic-1-partition-1p-1c-1kb +name: 20k-1-topic-1-partition-1p-1c-1kb topics: 1 partitionsPerTopic: 1 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 -producerRate: 500000 +producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml similarity index 92% rename from workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml rename to workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml index 7284cfae0..13a01400e 100644 --- a/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml +++ b/workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 500k-1-topic-1-partition-1p-1c-64kb +name: 20k-1-topic-1-partition-1p-1c-64kb topics: 1 partitionsPerTopic: 1 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-64kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 -producerRate: 500000 +producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml similarity index 92% rename from workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml rename to workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml index e087a688e..5d2a13a63 100644 --- a/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml +++ b/workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 500k-1-topic-16-partition-1p-1c-100b +name: 20k-1-topic-16-partition-1p-1c-100b topics: 1 partitionsPerTopic: 16 @@ -21,7 +21,7 @@ payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 -producerRate: 500000 +producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml similarity index 92% rename from workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml rename to workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml index ff6e02ea2..d874272c5 100644 --- a/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml +++ b/workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 200k-1-topic-16-partition-1p-1c-1kb +name: 20k-1-topic-16-partition-1p-1c-1kb topics: 1 partitionsPerTopic: 16 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 -producerRate: 200000 +producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml similarity index 92% rename from workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml rename to workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml index 246389bd5..4174cd951 100644 --- a/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml +++ b/workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 500k-1-topic-16-partition-1p-1c-64kb +name: 20k-1-topic-16-partition-1p-1c-64kb topics: 1 partitionsPerTopic: 16 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-64kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 -producerRate: 500000 +producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml similarity index 92% rename from workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml rename to workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml index b552aa84c..d24c0e3ce 100644 --- a/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 500k-1-topic-512-partition-4p-4c-100b +name: 20k-1-topic-512-partition-4p-4c-100b topics: 1 partitionsPerTopic: 512 @@ -21,7 +21,7 @@ payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 consumerPerSubscription: 4 producersPerTopic: 4 -producerRate: 500000 +producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml similarity index 92% rename from workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml rename to workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml index 0806a57c0..d1aff2dee 100644 --- a/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 200k-1-topic-512-partition-4p-4c-1kb +name: 20k-1-topic-512-partition-4p-4c-1kb topics: 1 partitionsPerTopic: 512 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 4 producersPerTopic: 4 -producerRate: 200000 +producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml similarity index 92% rename from workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml rename to workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml index 44f4c0f3d..e1b35c6fc 100644 --- a/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 200k-1-topic-512-partition-4p-4c-1kb +name: 20k-1-topic-512-partition-4p-4c-1kb topics: 1 partitionsPerTopic: 512 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-64kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 4 producersPerTopic: 4 -producerRate: 200000 +producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml similarity index 92% rename from workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml rename to workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml index cf0ac02d4..031158c26 100644 --- a/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml +++ b/workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 200k-1-topic-64-partition-4p-4c-100b +name: 20k-1-topic-64-partition-4p-4c-100b topics: 1 partitionsPerTopic: 64 @@ -21,7 +21,7 @@ payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 consumerPerSubscription: 4 producersPerTopic: 4 -producerRate: 200000 +producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml similarity index 92% rename from workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml rename to workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml index 0bef5debd..744e0026f 100644 --- a/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml +++ b/workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 500k-1-topic-64-partition-4p-4c-1kb +name: 20k-1-topic-64-partition-4p-4c-1kb topics: 1 partitionsPerTopic: 64 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 4 producersPerTopic: 4 -producerRate: 500000 +producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml similarity index 92% rename from workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml rename to workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml index 822ea3026..9466daaa8 100644 --- a/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml +++ b/workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 500k-1-topic-64-partition-4p-4c-1kb +name: 20k-1-topic-64-partition-4p-4c-1kb topics: 1 partitionsPerTopic: 64 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-64kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 4 producersPerTopic: 4 -producerRate: 500000 +producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml similarity index 92% rename from workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml rename to workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml index 14c61ae63..78ffdfd48 100644 --- a/workloads/asp/500k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml +++ b/workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 500k-1-topic-1-partition-1p-1c-100b +name: 50k-1-topic-1-partition-1p-1c-100b topics: 1 partitionsPerTopic: 1 @@ -21,7 +21,7 @@ payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 -producerRate: 500000 +producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml similarity index 92% rename from workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml rename to workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml index 686bd33fd..29a1b7ced 100644 --- a/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml +++ b/workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 200k-1-topic-1-partition-1p-1c-1kb +name: 50k-1-topic-1-partition-1p-1c-1kb topics: 1 partitionsPerTopic: 1 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 -producerRate: 200000 +producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml similarity index 92% rename from workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml rename to workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml index b82c31b97..0cd4478d9 100644 --- a/workloads/asp/200k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml +++ b/workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 200k-1-topic-1-partition-1p-1c-64kb +name: 50k-1-topic-1-partition-1p-1c-64kb topics: 1 partitionsPerTopic: 1 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-64kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 -producerRate: 200000 +producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml similarity index 92% rename from workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml rename to workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml index 9885482ad..5e1199ea6 100644 --- a/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml +++ b/workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 200k-1-topic-16-partition-1p-1c-100b +name: 50k-1-topic-16-partition-1p-1c-100b topics: 1 partitionsPerTopic: 16 @@ -21,7 +21,7 @@ payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 -producerRate: 200000 +producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml similarity index 92% rename from workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml rename to workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml index 86c1eeb50..1e3ac18dd 100644 --- a/workloads/asp/500k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml +++ b/workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 500k-1-topic-16-partition-1p-1c-1kb +name: 50k-1-topic-16-partition-1p-1c-1kb topics: 1 partitionsPerTopic: 16 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 -producerRate: 500000 +producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml similarity index 92% rename from workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml rename to workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml index b73a7cf72..8e1e01586 100644 --- a/workloads/asp/200k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml +++ b/workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 200k-1-topic-16-partition-1p-1c-64kb +name: 50k-1-topic-16-partition-1p-1c-64kb topics: 1 partitionsPerTopic: 16 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-64kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 1 producersPerTopic: 1 -producerRate: 200000 +producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml similarity index 92% rename from workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml rename to workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml index d7f81563d..e2b177ece 100644 --- a/workloads/asp/200k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 200k-1-topic-512-partition-4p-4c-100b +name: 50k-1-topic-512-partition-4p-4c-100b topics: 1 partitionsPerTopic: 512 @@ -21,7 +21,7 @@ payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 consumerPerSubscription: 4 producersPerTopic: 4 -producerRate: 200000 +producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml similarity index 92% rename from workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml rename to workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml index 583e221e0..5c40e71c6 100644 --- a/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 500k-1-topic-512-partition-4p-4c-1kb +name: 50k-1-topic-512-partition-4p-4c-1kb topics: 1 partitionsPerTopic: 512 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 4 producersPerTopic: 4 -producerRate: 500000 +producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml similarity index 92% rename from workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml rename to workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml index dbbe954ab..0c79bd3b1 100644 --- a/workloads/asp/500k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 500k-1-topic-512-partition-4p-4c-1kb +name: 50k-1-topic-512-partition-4p-4c-1kb topics: 1 partitionsPerTopic: 512 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-64kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 4 producersPerTopic: 4 -producerRate: 500000 +producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml similarity index 92% rename from workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml rename to workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml index 7be3353b1..38af07e0d 100644 --- a/workloads/asp/500k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml +++ b/workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 500k-1-topic-64-partition-4p-4c-100b +name: 50k-1-topic-64-partition-4p-4c-100b topics: 1 partitionsPerTopic: 64 @@ -21,7 +21,7 @@ payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 consumerPerSubscription: 4 producersPerTopic: 4 -producerRate: 500000 +producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml similarity index 92% rename from workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml rename to workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml index 473facad7..5be11d8c7 100644 --- a/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml +++ b/workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 200k-1-topic-64-partition-4p-4c-1kb +name: 50k-1-topic-64-partition-4p-4c-1kb topics: 1 partitionsPerTopic: 64 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 4 producersPerTopic: 4 -producerRate: 200000 +producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml similarity index 92% rename from workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml rename to workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml index d5b9f96e0..266109a08 100644 --- a/workloads/asp/200k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml +++ b/workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 200k-1-topic-64-partition-4p-4c-1kb +name: 50k-1-topic-64-partition-4p-4c-1kb topics: 1 partitionsPerTopic: 64 @@ -21,6 +21,6 @@ payloadFile: "payload/payload-64kb.data" subscriptionsPerTopic: 1 consumerPerSubscription: 4 producersPerTopic: 4 -producerRate: 200000 +producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 From ed108d1c78fac40e7daabf7c1b11e440274268ba Mon Sep 17 00:00:00 2001 From: dao-jun Date: Wed, 24 Jul 2024 15:29:28 +0800 Subject: [PATCH 17/29] add 10k throughput workload files --- .../1-topic-1-partition-1p-1c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-1-partition-1p-1c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-1-partition-1p-1c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-16-partition-1p-1c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-16-partition-1p-1c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-16-partition-1p-1c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-512-partition-16p-16c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-512-partition-16p-16c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-512-partition-16p-16c-64kb.yaml | 26 ++++++++++++++++++ .../1-topic-64-partition-4p-4c-100b.yaml | 27 +++++++++++++++++++ .../1-topic-64-partition-4p-4c-1kb.yaml | 26 ++++++++++++++++++ .../1-topic-64-partition-4p-4c-64kb.yaml | 26 ++++++++++++++++++ 12 files changed, 316 insertions(+) create mode 100644 workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml create mode 100644 workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml create mode 100644 workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml create mode 100644 workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml create mode 100644 workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml create mode 100644 workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml create mode 100644 workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml create mode 100644 workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml create mode 100644 workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml create mode 100644 workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml create mode 100644 workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml create mode 100644 workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml diff --git a/workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml new file mode 100644 index 000000000..a7675a990 --- /dev/null +++ b/workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-1-partition-1p-1c-100b + +topics: 1 +partitionsPerTopic: 1 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml new file mode 100644 index 000000000..e1cc1f553 --- /dev/null +++ b/workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-1-partition-1p-1c-1kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml new file mode 100644 index 000000000..6e0e9ab41 --- /dev/null +++ b/workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-1-partition-1p-1c-64kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml new file mode 100644 index 000000000..c5d2b26f7 --- /dev/null +++ b/workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-16-partition-1p-1c-100b + +topics: 1 +partitionsPerTopic: 16 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml new file mode 100644 index 000000000..14d757335 --- /dev/null +++ b/workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-16-partition-1p-1c-1kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml new file mode 100644 index 000000000..b9a1ae35b --- /dev/null +++ b/workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-16-partition-1p-1c-64kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml new file mode 100644 index 000000000..fb64e9066 --- /dev/null +++ b/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-512-partition-4p-4c-100b + +topics: 1 +partitionsPerTopic: 512 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml new file mode 100644 index 000000000..47ad7598f --- /dev/null +++ b/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-512-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml new file mode 100644 index 000000000..5ec56edad --- /dev/null +++ b/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-512-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml new file mode 100644 index 000000000..b30d8d29d --- /dev/null +++ b/workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml @@ -0,0 +1,27 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-64-partition-4p-4c-100b + +topics: 1 +partitionsPerTopic: 64 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 + diff --git a/workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml new file mode 100644 index 000000000..b24de524e --- /dev/null +++ b/workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-64-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 diff --git a/workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml new file mode 100644 index 000000000..d5b04c3a7 --- /dev/null +++ b/workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-64-partition-4p-4c-1kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 4 +producersPerTopic: 4 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 15 From d3d8da8278903d450e90d445ad3ed4a6cc20cee4 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Wed, 24 Jul 2024 16:59:14 +0800 Subject: [PATCH 18/29] rename workload files --- doc/performance_test.md | 24 +++++++++---------- ... 100k-1-topic-1-partition-1p-1c-100b.yaml} | 0 ...> 100k-1-topic-1-partition-1p-1c-1kb.yaml} | 0 ... 100k-1-topic-1-partition-1p-1c-64kb.yaml} | 0 ...100k-1-topic-16-partition-1p-1c-100b.yaml} | 0 ... 100k-1-topic-16-partition-1p-1c-1kb.yaml} | 0 ...100k-1-topic-16-partition-1p-1c-64kb.yaml} | 0 ...k-1-topic-512-partition-16p-16c-100b.yaml} | 4 ++-- ...0k-1-topic-512-partition-16p-16c-1kb.yaml} | 4 ++-- ...k-1-topic-512-partition-16p-16c-64kb.yaml} | 4 ++-- ...100k-1-topic-64-partition-4p-4c-100b.yaml} | 0 ... 100k-1-topic-64-partition-4p-4c-1kb.yaml} | 0 ...100k-1-topic-64-partition-4p-4c-64kb.yaml} | 0 ...> 10k-1-topic-1-partition-1p-1c-100b.yaml} | 0 ...=> 10k-1-topic-1-partition-1p-1c-1kb.yaml} | 0 ...> 10k-1-topic-1-partition-1p-1c-64kb.yaml} | 0 ... 10k-1-topic-16-partition-1p-1c-100b.yaml} | 0 ...> 10k-1-topic-16-partition-1p-1c-1kb.yaml} | 0 ... 10k-1-topic-16-partition-1p-1c-64kb.yaml} | 0 ...k-1-topic-512-partition-16p-16c-100b.yaml} | 4 ++-- ...0k-1-topic-512-partition-16p-16c-1kb.yaml} | 4 ++-- ...k-1-topic-512-partition-16p-16c-64kb.yaml} | 4 ++-- ... 10k-1-topic-64-partition-4p-4c-100b.yaml} | 0 ...> 10k-1-topic-64-partition-4p-4c-1kb.yaml} | 0 ... 10k-1-topic-64-partition-4p-4c-64kb.yaml} | 0 ...> 20k-1-topic-1-partition-1p-1c-100b.yaml} | 0 ...=> 20k-1-topic-1-partition-1p-1c-1kb.yaml} | 0 ...> 20k-1-topic-1-partition-1p-1c-64kb.yaml} | 0 ... 20k-1-topic-16-partition-1p-1c-100b.yaml} | 0 ...> 20k-1-topic-16-partition-1p-1c-1kb.yaml} | 0 ... 20k-1-topic-16-partition-1p-1c-64kb.yaml} | 0 ...k-1-topic-512-partition-16p-16c-100b.yaml} | 4 ++-- ...k-1-topic-512-partition-16p-16c-64kb.yaml} | 4 ++-- ... 20k-topic-512-partition-16p-16c-1kb.yaml} | 4 ++-- ... 20k-1-topic-64-partition-4p-4c-100b.yaml} | 0 ...> 20k-1-topic-64-partition-4p-4c-1kb.yaml} | 0 ... 20k-1-topic-64-partition-4p-4c-64kb.yaml} | 0 ...> 50k-1-topic-1-partition-1p-1c-100b.yaml} | 0 ...=> 50k-1-topic-1-partition-1p-1c-1kb.yaml} | 0 ...> 50k-1-topic-1-partition-1p-1c-64kb.yaml} | 0 ... 50k-1-topic-16-partition-1p-1c-100b.yaml} | 0 ...> 50k-1-topic-16-partition-1p-1c-1kb.yaml} | 0 ... 50k-1-topic-16-partition-1p-1c-64kb.yaml} | 0 ...k-1-topic-512-partition-16p-16c-100b.yaml} | 4 ++-- ...0k-1-topic-512-partition-16p-16c-1kb.yaml} | 4 ++-- ...k-1-topic-512-partition-16p-16c-64kb.yaml} | 4 ++-- ... 50k-1-topic-64-partition-4p-4c-100b.yaml} | 0 ...> 50k-1-topic-64-partition-4p-4c-1kb.yaml} | 0 ... 50k-1-topic-64-partition-4p-4c-64kb.yaml} | 0 ...> max-1-topic-1-partition-1p-1c-100b.yaml} | 0 ...=> max-1-topic-1-partition-1p-1c-1kb.yaml} | 0 ...> max-1-topic-1-partition-1p-1c-64kb.yaml} | 0 ... max-1-topic-16-partition-1p-1c-100b.yaml} | 0 ...> max-1-topic-16-partition-1p-1c-1kb.yaml} | 0 ... max-1-topic-16-partition-1p-1c-64kb.yaml} | 0 ...x-1-topic-512-partition-16p-16c-100b.yaml} | 4 ++-- ...ax-1-topic-512-partition-16p-16c-1kb.yaml} | 4 ++-- ...x-1-topic-512-partition-16p-16c-64kb.yaml} | 4 ++-- ... max-1-topic-64-partition-4p-4c-100b.yaml} | 0 ...> max-1-topic-64-partition-4p-4c-1kb.yaml} | 0 ... max-1-topic-64-partition-4p-4c-64kb.yaml} | 0 61 files changed, 42 insertions(+), 42 deletions(-) rename workloads/asp/100k/1-topic-1-partition/{1-topic-1-partition-1p-1c-100b.yaml => 100k-1-topic-1-partition-1p-1c-100b.yaml} (100%) rename workloads/asp/100k/1-topic-1-partition/{1-topic-1-partition-1p-1c-1kb.yaml => 100k-1-topic-1-partition-1p-1c-1kb.yaml} (100%) rename workloads/asp/100k/1-topic-1-partition/{1-topic-1-partition-1p-1c-64kb.yaml => 100k-1-topic-1-partition-1p-1c-64kb.yaml} (100%) rename workloads/asp/100k/1-topic-16-partition/{1-topic-16-partition-1p-1c-100b.yaml => 100k-1-topic-16-partition-1p-1c-100b.yaml} (100%) rename workloads/asp/100k/1-topic-16-partition/{1-topic-16-partition-1p-1c-1kb.yaml => 100k-1-topic-16-partition-1p-1c-1kb.yaml} (100%) rename workloads/asp/100k/1-topic-16-partition/{1-topic-16-partition-1p-1c-64kb.yaml => 100k-1-topic-16-partition-1p-1c-64kb.yaml} (100%) rename workloads/asp/100k/1-topic-512-partition/{1-topic-512-partition-16p-16c-100b.yaml => 100k-1-topic-512-partition-16p-16c-100b.yaml} (93%) rename workloads/asp/100k/1-topic-512-partition/{1-topic-512-partition-16p-16c-1kb.yaml => 100k-1-topic-512-partition-16p-16c-1kb.yaml} (93%) rename workloads/asp/100k/1-topic-512-partition/{1-topic-512-partition-16p-16c-64kb.yaml => 100k-1-topic-512-partition-16p-16c-64kb.yaml} (93%) rename workloads/asp/100k/1-topic-64-partition/{1-topic-64-partition-4p-4c-100b.yaml => 100k-1-topic-64-partition-4p-4c-100b.yaml} (100%) rename workloads/asp/100k/1-topic-64-partition/{1-topic-64-partition-4p-4c-1kb.yaml => 100k-1-topic-64-partition-4p-4c-1kb.yaml} (100%) rename workloads/asp/100k/1-topic-64-partition/{1-topic-64-partition-4p-4c-64kb.yaml => 100k-1-topic-64-partition-4p-4c-64kb.yaml} (100%) rename workloads/asp/10k/1-topic-1-partition/{1-topic-1-partition-1p-1c-100b.yaml => 10k-1-topic-1-partition-1p-1c-100b.yaml} (100%) rename workloads/asp/10k/1-topic-1-partition/{1-topic-1-partition-1p-1c-1kb.yaml => 10k-1-topic-1-partition-1p-1c-1kb.yaml} (100%) rename workloads/asp/10k/1-topic-1-partition/{1-topic-1-partition-1p-1c-64kb.yaml => 10k-1-topic-1-partition-1p-1c-64kb.yaml} (100%) rename workloads/asp/10k/1-topic-16-partition/{1-topic-16-partition-1p-1c-100b.yaml => 10k-1-topic-16-partition-1p-1c-100b.yaml} (100%) rename workloads/asp/10k/1-topic-16-partition/{1-topic-16-partition-1p-1c-1kb.yaml => 10k-1-topic-16-partition-1p-1c-1kb.yaml} (100%) rename workloads/asp/10k/1-topic-16-partition/{1-topic-16-partition-1p-1c-64kb.yaml => 10k-1-topic-16-partition-1p-1c-64kb.yaml} (100%) rename workloads/asp/10k/1-topic-512-partition/{1-topic-512-partition-16p-16c-100b.yaml => 10k-1-topic-512-partition-16p-16c-100b.yaml} (93%) rename workloads/asp/10k/1-topic-512-partition/{1-topic-512-partition-16p-16c-1kb.yaml => 10k-1-topic-512-partition-16p-16c-1kb.yaml} (93%) rename workloads/asp/10k/1-topic-512-partition/{1-topic-512-partition-16p-16c-64kb.yaml => 10k-1-topic-512-partition-16p-16c-64kb.yaml} (93%) rename workloads/asp/10k/1-topic-64-partition/{1-topic-64-partition-4p-4c-100b.yaml => 10k-1-topic-64-partition-4p-4c-100b.yaml} (100%) rename workloads/asp/10k/1-topic-64-partition/{1-topic-64-partition-4p-4c-1kb.yaml => 10k-1-topic-64-partition-4p-4c-1kb.yaml} (100%) rename workloads/asp/10k/1-topic-64-partition/{1-topic-64-partition-4p-4c-64kb.yaml => 10k-1-topic-64-partition-4p-4c-64kb.yaml} (100%) rename workloads/asp/20k/1-topic-1-partition/{1-topic-1-partition-1p-1c-100b.yaml => 20k-1-topic-1-partition-1p-1c-100b.yaml} (100%) rename workloads/asp/20k/1-topic-1-partition/{1-topic-1-partition-1p-1c-1kb.yaml => 20k-1-topic-1-partition-1p-1c-1kb.yaml} (100%) rename workloads/asp/20k/1-topic-1-partition/{1-topic-1-partition-1p-1c-64kb.yaml => 20k-1-topic-1-partition-1p-1c-64kb.yaml} (100%) rename workloads/asp/20k/1-topic-16-partition/{1-topic-16-partition-1p-1c-100b.yaml => 20k-1-topic-16-partition-1p-1c-100b.yaml} (100%) rename workloads/asp/20k/1-topic-16-partition/{1-topic-16-partition-1p-1c-1kb.yaml => 20k-1-topic-16-partition-1p-1c-1kb.yaml} (100%) rename workloads/asp/20k/1-topic-16-partition/{1-topic-16-partition-1p-1c-64kb.yaml => 20k-1-topic-16-partition-1p-1c-64kb.yaml} (100%) rename workloads/asp/20k/1-topic-512-partition/{1-topic-512-partition-16p-16c-100b.yaml => 20k-1-topic-512-partition-16p-16c-100b.yaml} (93%) rename workloads/asp/20k/1-topic-512-partition/{1-topic-512-partition-16p-16c-64kb.yaml => 20k-1-topic-512-partition-16p-16c-64kb.yaml} (93%) rename workloads/asp/20k/1-topic-512-partition/{1-topic-512-partition-16p-16c-1kb.yaml => 20k-topic-512-partition-16p-16c-1kb.yaml} (93%) rename workloads/asp/20k/1-topic-64-partition/{1-topic-64-partition-4p-4c-100b.yaml => 20k-1-topic-64-partition-4p-4c-100b.yaml} (100%) rename workloads/asp/20k/1-topic-64-partition/{1-topic-64-partition-4p-4c-1kb.yaml => 20k-1-topic-64-partition-4p-4c-1kb.yaml} (100%) rename workloads/asp/20k/1-topic-64-partition/{1-topic-64-partition-4p-4c-64kb.yaml => 20k-1-topic-64-partition-4p-4c-64kb.yaml} (100%) rename workloads/asp/50k/1-topic-1-partition/{1-topic-1-partition-1p-1c-100b.yaml => 50k-1-topic-1-partition-1p-1c-100b.yaml} (100%) rename workloads/asp/50k/1-topic-1-partition/{1-topic-1-partition-1p-1c-1kb.yaml => 50k-1-topic-1-partition-1p-1c-1kb.yaml} (100%) rename workloads/asp/50k/1-topic-1-partition/{1-topic-1-partition-1p-1c-64kb.yaml => 50k-1-topic-1-partition-1p-1c-64kb.yaml} (100%) rename workloads/asp/50k/1-topic-16-partition/{1-topic-16-partition-1p-1c-100b.yaml => 50k-1-topic-16-partition-1p-1c-100b.yaml} (100%) rename workloads/asp/50k/1-topic-16-partition/{1-topic-16-partition-1p-1c-1kb.yaml => 50k-1-topic-16-partition-1p-1c-1kb.yaml} (100%) rename workloads/asp/50k/1-topic-16-partition/{1-topic-16-partition-1p-1c-64kb.yaml => 50k-1-topic-16-partition-1p-1c-64kb.yaml} (100%) rename workloads/asp/50k/1-topic-512-partition/{1-topic-512-partition-16p-16c-100b.yaml => 50k-1-topic-512-partition-16p-16c-100b.yaml} (93%) rename workloads/asp/50k/1-topic-512-partition/{1-topic-512-partition-16p-16c-1kb.yaml => 50k-1-topic-512-partition-16p-16c-1kb.yaml} (93%) rename workloads/asp/50k/1-topic-512-partition/{1-topic-512-partition-16p-16c-64kb.yaml => 50k-1-topic-512-partition-16p-16c-64kb.yaml} (93%) rename workloads/asp/50k/1-topic-64-partition/{1-topic-64-partition-4p-4c-100b.yaml => 50k-1-topic-64-partition-4p-4c-100b.yaml} (100%) rename workloads/asp/50k/1-topic-64-partition/{1-topic-64-partition-4p-4c-1kb.yaml => 50k-1-topic-64-partition-4p-4c-1kb.yaml} (100%) rename workloads/asp/50k/1-topic-64-partition/{1-topic-64-partition-4p-4c-64kb.yaml => 50k-1-topic-64-partition-4p-4c-64kb.yaml} (100%) rename workloads/asp/max/1-topic-1-partition/{1-topic-1-partition-1p-1c-100b.yaml => max-1-topic-1-partition-1p-1c-100b.yaml} (100%) rename workloads/asp/max/1-topic-1-partition/{1-topic-1-partition-1p-1c-1kb.yaml => max-1-topic-1-partition-1p-1c-1kb.yaml} (100%) rename workloads/asp/max/1-topic-1-partition/{1-topic-1-partition-1p-1c-64kb.yaml => max-1-topic-1-partition-1p-1c-64kb.yaml} (100%) rename workloads/asp/max/1-topic-16-partition/{1-topic-16-partition-1p-1c-100b.yaml => max-1-topic-16-partition-1p-1c-100b.yaml} (100%) rename workloads/asp/max/1-topic-16-partition/{1-topic-16-partition-1p-1c-1kb.yaml => max-1-topic-16-partition-1p-1c-1kb.yaml} (100%) rename workloads/asp/max/1-topic-16-partition/{1-topic-16-partition-1p-1c-64kb.yaml => max-1-topic-16-partition-1p-1c-64kb.yaml} (100%) rename workloads/asp/max/1-topic-512-partition/{1-topic-512-partition-16p-16c-100b.yaml => max-1-topic-512-partition-16p-16c-100b.yaml} (94%) rename workloads/asp/max/1-topic-512-partition/{1-topic-512-partition-16p-16c-1kb.yaml => max-1-topic-512-partition-16p-16c-1kb.yaml} (93%) rename workloads/asp/max/1-topic-512-partition/{1-topic-512-partition-16p-16c-64kb.yaml => max-1-topic-512-partition-16p-16c-64kb.yaml} (94%) rename workloads/asp/max/1-topic-64-partition/{1-topic-64-partition-4p-4c-100b.yaml => max-1-topic-64-partition-4p-4c-100b.yaml} (100%) rename workloads/asp/max/1-topic-64-partition/{1-topic-64-partition-4p-4c-1kb.yaml => max-1-topic-64-partition-4p-4c-1kb.yaml} (100%) rename workloads/asp/max/1-topic-64-partition/{1-topic-64-partition-4p-4c-64kb.yaml => max-1-topic-64-partition-4p-4c-64kb.yaml} (100%) diff --git a/doc/performance_test.md b/doc/performance_test.md index b4a728cb8..e8a55adff 100644 --- a/doc/performance_test.md +++ b/doc/performance_test.md @@ -135,18 +135,18 @@ KoP, Pulsar, Kafka, KoP Proxy | 场景 | Topics | Partitions per topic | Producers | Subscriptions | Consumers per subscription | Message Size | Workload | |----|--------|----------------------|-----------|---------------|----------------------------|--------------|--------------------------------------------------------------------------------------------------------------------------| -| 1 | 1 | 1 | 1 | 1 | 1 | 100B | [1-topic-1-partition-1p-1c-100b](../workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml) | -| 2 | 1 | 1 | 1 | 1 | 1 | 1KB | [1-topic-1-partition-1p-1c-1kb](../workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml) | -| 3 | 1 | 1 | 1 | 1 | 1 | 64KB | [1-topic-1-partition-1p-1c-64kb](../workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml) | -| 4 | 1 | 16 | 1 | 1 | 1 | 100B | [1-topic-16-partition-1p-1c-100b](../workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml) | -| 5 | 1 | 16 | 1 | 1 | 1 | 1KB | [1-topic-16-partition-1p-1c-1kb](../workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml) | -| 6 | 1 | 16 | 1 | 1 | 1 | 64KB | [1-topic-16-partition-1p-1c-64kb](../workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml) | -| 7 | 1 | 64 | 4 | 1 | 4 | 100B | [1-topic-64-partition-4p-4c-100b](../workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml) | -| 8 | 1 | 64 | 4 | 1 | 4 | 1KB | [1-topic-64-partition-4p-4c-1kb](../workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml) | -| 9 | 1 | 64 | 4 | 1 | 4 | 64KB | [1-topic-64-partition-4p-4c-64kb](../workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml) | -| 10 | 1 | 512 | 16 | 1 | 16 | 100B | [1-topic-512-partition-16p-16c-100b](../workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml) | -| 11 | 1 | 512 | 16 | 1 | 16 | 1KB | [1-topic-512-partition-16p-16c-1kb](../workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml) | -| 12 | 1 | 512 | 16 | 1 | 16 | 64KB | [1-topic-512-partition-16p-16c-64kb](../workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml) | +| 1 | 1 | 1 | 1 | 1 | 1 | 100B | [1-topic-1-partition-1p-1c-100b](../workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-100b.yaml) | +| 2 | 1 | 1 | 1 | 1 | 1 | 1KB | [1-topic-1-partition-1p-1c-1kb](../workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-1kb.yaml) | +| 3 | 1 | 1 | 1 | 1 | 1 | 64KB | [1-topic-1-partition-1p-1c-64kb](../workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-64kb.yaml) | +| 4 | 1 | 16 | 1 | 1 | 1 | 100B | [1-topic-16-partition-1p-1c-100b](../workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-100b.yaml) | +| 5 | 1 | 16 | 1 | 1 | 1 | 1KB | [1-topic-16-partition-1p-1c-1kb](../workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-1kb.yaml) | +| 6 | 1 | 16 | 1 | 1 | 1 | 64KB | [1-topic-16-partition-1p-1c-64kb](../workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-64kb.yaml) | +| 7 | 1 | 64 | 4 | 1 | 4 | 100B | [1-topic-64-partition-4p-4c-100b](../workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-100b.yaml) | +| 8 | 1 | 64 | 4 | 1 | 4 | 1KB | [1-topic-64-partition-4p-4c-1kb](../workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-1kb.yaml) | +| 9 | 1 | 64 | 4 | 1 | 4 | 64KB | [1-topic-64-partition-4p-4c-64kb](../workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-64kb.yaml) | +| 10 | 1 | 512 | 16 | 1 | 16 | 100B | [1-topic-512-partition-16p-16c-100b](../workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-100b.yaml) | +| 11 | 1 | 512 | 16 | 1 | 16 | 1KB | [1-topic-512-partition-16p-16c-1kb](../workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-1kb.yaml) | +| 12 | 1 | 512 | 16 | 1 | 16 | 64KB | [1-topic-512-partition-16p-16c-64kb](../workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-64kb.yaml) | - 后续规划 diff --git a/workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-100b.yaml similarity index 100% rename from workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml rename to workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-100b.yaml diff --git a/workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-1kb.yaml similarity index 100% rename from workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml rename to workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-1kb.yaml diff --git a/workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-64kb.yaml similarity index 100% rename from workloads/asp/100k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml rename to workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-64kb.yaml diff --git a/workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-100b.yaml similarity index 100% rename from workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml rename to workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-100b.yaml diff --git a/workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-1kb.yaml similarity index 100% rename from workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml rename to workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-1kb.yaml diff --git a/workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-64kb.yaml similarity index 100% rename from workloads/asp/100k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml rename to workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-64kb.yaml diff --git a/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-100b.yaml similarity index 93% rename from workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml rename to workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-100b.yaml index cf00d1360..8014bb22e 100644 --- a/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-100b.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 100 payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 100000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-1kb.yaml similarity index 93% rename from workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml rename to workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-1kb.yaml index 618b53392..8ae2b07c6 100644 --- a/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-1kb.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 1024 payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 100000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-64kb.yaml similarity index 93% rename from workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml rename to workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-64kb.yaml index 486beccd7..b4177faae 100644 --- a/workloads/asp/100k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-64kb.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 65536 payloadFile: "payload/payload-64kb.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 100000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-100b.yaml similarity index 100% rename from workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml rename to workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-100b.yaml diff --git a/workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-1kb.yaml similarity index 100% rename from workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml rename to workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-1kb.yaml diff --git a/workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-64kb.yaml similarity index 100% rename from workloads/asp/100k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml rename to workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-64kb.yaml diff --git a/workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-100b.yaml similarity index 100% rename from workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml rename to workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-100b.yaml diff --git a/workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-1kb.yaml similarity index 100% rename from workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml rename to workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-1kb.yaml diff --git a/workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-64kb.yaml similarity index 100% rename from workloads/asp/10k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml rename to workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-64kb.yaml diff --git a/workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-100b.yaml similarity index 100% rename from workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml rename to workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-100b.yaml diff --git a/workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-1kb.yaml similarity index 100% rename from workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml rename to workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-1kb.yaml diff --git a/workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-64kb.yaml similarity index 100% rename from workloads/asp/10k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml rename to workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-64kb.yaml diff --git a/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-100b.yaml similarity index 93% rename from workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml rename to workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-100b.yaml index fb64e9066..4382dbc8a 100644 --- a/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-100b.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 100 payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 10000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-1kb.yaml similarity index 93% rename from workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml rename to workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-1kb.yaml index 47ad7598f..f7df18917 100644 --- a/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-1kb.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 1024 payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 10000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-64kb.yaml similarity index 93% rename from workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml rename to workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-64kb.yaml index 5ec56edad..65ecaa2c1 100644 --- a/workloads/asp/10k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-64kb.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 65536 payloadFile: "payload/payload-64kb.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 10000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-100b.yaml similarity index 100% rename from workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml rename to workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-100b.yaml diff --git a/workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-1kb.yaml similarity index 100% rename from workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml rename to workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-1kb.yaml diff --git a/workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-64kb.yaml similarity index 100% rename from workloads/asp/10k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml rename to workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-64kb.yaml diff --git a/workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-100b.yaml similarity index 100% rename from workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml rename to workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-100b.yaml diff --git a/workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-1kb.yaml similarity index 100% rename from workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml rename to workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-1kb.yaml diff --git a/workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-64kb.yaml similarity index 100% rename from workloads/asp/20k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml rename to workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-64kb.yaml diff --git a/workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-100b.yaml similarity index 100% rename from workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml rename to workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-100b.yaml diff --git a/workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-1kb.yaml similarity index 100% rename from workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml rename to workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-1kb.yaml diff --git a/workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-64kb.yaml similarity index 100% rename from workloads/asp/20k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml rename to workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-64kb.yaml diff --git a/workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-100b.yaml similarity index 93% rename from workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml rename to workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-100b.yaml index d24c0e3ce..22009d5e8 100644 --- a/workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-100b.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 100 payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-64kb.yaml similarity index 93% rename from workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml rename to workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-64kb.yaml index e1b35c6fc..0880acea3 100644 --- a/workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-64kb.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 65536 payloadFile: "payload/payload-64kb.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/20k/1-topic-512-partition/20k-topic-512-partition-16p-16c-1kb.yaml similarity index 93% rename from workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml rename to workloads/asp/20k/1-topic-512-partition/20k-topic-512-partition-16p-16c-1kb.yaml index d1aff2dee..a559f59b9 100644 --- a/workloads/asp/20k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/20k/1-topic-512-partition/20k-topic-512-partition-16p-16c-1kb.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 1024 payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 20000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-100b.yaml similarity index 100% rename from workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml rename to workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-100b.yaml diff --git a/workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-1kb.yaml similarity index 100% rename from workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml rename to workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-1kb.yaml diff --git a/workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-64kb.yaml similarity index 100% rename from workloads/asp/20k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml rename to workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-64kb.yaml diff --git a/workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-100b.yaml similarity index 100% rename from workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml rename to workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-100b.yaml diff --git a/workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-1kb.yaml similarity index 100% rename from workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml rename to workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-1kb.yaml diff --git a/workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-64kb.yaml similarity index 100% rename from workloads/asp/50k/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml rename to workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-64kb.yaml diff --git a/workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-100b.yaml similarity index 100% rename from workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml rename to workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-100b.yaml diff --git a/workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-1kb.yaml similarity index 100% rename from workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml rename to workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-1kb.yaml diff --git a/workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-64kb.yaml similarity index 100% rename from workloads/asp/50k/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml rename to workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-64kb.yaml diff --git a/workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-100b.yaml similarity index 93% rename from workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml rename to workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-100b.yaml index e2b177ece..11e8045db 100644 --- a/workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-100b.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 100 payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-1kb.yaml similarity index 93% rename from workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml rename to workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-1kb.yaml index 5c40e71c6..b3f0ad33d 100644 --- a/workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-1kb.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 1024 payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-64kb.yaml similarity index 93% rename from workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml rename to workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-64kb.yaml index 0c79bd3b1..da0ed0a4a 100644 --- a/workloads/asp/50k/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-64kb.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 65536 payloadFile: "payload/payload-64kb.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 50000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-100b.yaml similarity index 100% rename from workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml rename to workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-100b.yaml diff --git a/workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-1kb.yaml similarity index 100% rename from workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml rename to workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-1kb.yaml diff --git a/workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-64kb.yaml similarity index 100% rename from workloads/asp/50k/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml rename to workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-64kb.yaml diff --git a/workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-100b.yaml similarity index 100% rename from workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-100b.yaml rename to workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-100b.yaml diff --git a/workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-1kb.yaml similarity index 100% rename from workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-1kb.yaml rename to workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-1kb.yaml diff --git a/workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-64kb.yaml similarity index 100% rename from workloads/asp/max/1-topic-1-partition/1-topic-1-partition-1p-1c-64kb.yaml rename to workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-64kb.yaml diff --git a/workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-100b.yaml similarity index 100% rename from workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-100b.yaml rename to workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-100b.yaml diff --git a/workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-1kb.yaml similarity index 100% rename from workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-1kb.yaml rename to workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-1kb.yaml diff --git a/workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-64kb.yaml similarity index 100% rename from workloads/asp/max/1-topic-16-partition/1-topic-16-partition-1p-1c-64kb.yaml rename to workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-64kb.yaml diff --git a/workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-100b.yaml similarity index 94% rename from workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml rename to workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-100b.yaml index a5dbf7e6e..47d5143ac 100644 --- a/workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-100b.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 100 payloadFile: "payload/payload-100b.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 10000000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-1kb.yaml similarity index 93% rename from workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml rename to workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-1kb.yaml index e43095517..f9ffa8f76 100644 --- a/workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-1kb.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 1024 payloadFile: "payload/payload-1Kb.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 10000000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-64kb.yaml similarity index 94% rename from workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml rename to workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-64kb.yaml index 014bdfa92..0aa6c4248 100644 --- a/workloads/asp/max/1-topic-512-partition/1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-64kb.yaml @@ -19,8 +19,8 @@ partitionsPerTopic: 512 messageSize: 65536 payloadFile: "payload/payload-64kb.data" subscriptionsPerTopic: 1 -consumerPerSubscription: 4 -producersPerTopic: 4 +consumerPerSubscription: 16 +producersPerTopic: 16 producerRate: 10000000 consumerBacklogSizeGB: 0 testDurationMinutes: 15 diff --git a/workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-100b.yaml similarity index 100% rename from workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-100b.yaml rename to workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-100b.yaml diff --git a/workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-1kb.yaml similarity index 100% rename from workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-1kb.yaml rename to workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-1kb.yaml diff --git a/workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-64kb.yaml similarity index 100% rename from workloads/asp/max/1-topic-64-partition/1-topic-64-partition-4p-4c-64kb.yaml rename to workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-64kb.yaml From 43138d932797ab50f2f5aa48a1a9d17eab51b3ff Mon Sep 17 00:00:00 2001 From: dao-jun Date: Wed, 24 Jul 2024 16:59:38 +0800 Subject: [PATCH 19/29] fix checkstyle --- doc/performance_test.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/performance_test.md b/doc/performance_test.md index e8a55adff..89f57e8f1 100644 --- a/doc/performance_test.md +++ b/doc/performance_test.md @@ -133,8 +133,8 @@ KoP, Pulsar, Kafka, KoP Proxy - 场景 -| 场景 | Topics | Partitions per topic | Producers | Subscriptions | Consumers per subscription | Message Size | Workload | -|----|--------|----------------------|-----------|---------------|----------------------------|--------------|--------------------------------------------------------------------------------------------------------------------------| +| 场景 | Topics | Partitions per topic | Producers | Subscriptions | Consumers per subscription | Message Size | Workload | +|----|--------|----------------------|-----------|---------------|----------------------------|--------------|------------------------------------------------------------------------------------------------------------------------------| | 1 | 1 | 1 | 1 | 1 | 1 | 100B | [1-topic-1-partition-1p-1c-100b](../workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-100b.yaml) | | 2 | 1 | 1 | 1 | 1 | 1 | 1KB | [1-topic-1-partition-1p-1c-1kb](../workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-1kb.yaml) | | 3 | 1 | 1 | 1 | 1 | 1 | 64KB | [1-topic-1-partition-1p-1c-64kb](../workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-64kb.yaml) | From f027c14d31cf45ba4ffef80c7152e9062593e781 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Wed, 24 Jul 2024 17:46:05 +0800 Subject: [PATCH 20/29] change testDurationMinutes: 15 to 10 --- .../100k-1-topic-1-partition-1p-1c-100b.yaml | 2 +- .../1-topic-1-partition/100k-1-topic-1-partition-1p-1c-1kb.yaml | 2 +- .../100k-1-topic-1-partition-1p-1c-64kb.yaml | 2 +- .../100k-1-topic-16-partition-1p-1c-100b.yaml | 2 +- .../100k-1-topic-16-partition-1p-1c-1kb.yaml | 2 +- .../100k-1-topic-16-partition-1p-1c-64kb.yaml | 2 +- .../100k-1-topic-512-partition-16p-16c-100b.yaml | 2 +- .../100k-1-topic-512-partition-16p-16c-1kb.yaml | 2 +- .../100k-1-topic-512-partition-16p-16c-64kb.yaml | 2 +- .../100k-1-topic-64-partition-4p-4c-100b.yaml | 2 +- .../100k-1-topic-64-partition-4p-4c-1kb.yaml | 2 +- .../100k-1-topic-64-partition-4p-4c-64kb.yaml | 2 +- .../1-topic-1-partition/10k-1-topic-1-partition-1p-1c-100b.yaml | 2 +- .../1-topic-1-partition/10k-1-topic-1-partition-1p-1c-1kb.yaml | 2 +- .../1-topic-1-partition/10k-1-topic-1-partition-1p-1c-64kb.yaml | 2 +- .../10k-1-topic-16-partition-1p-1c-100b.yaml | 2 +- .../10k-1-topic-16-partition-1p-1c-1kb.yaml | 2 +- .../10k-1-topic-16-partition-1p-1c-64kb.yaml | 2 +- .../10k-1-topic-512-partition-16p-16c-100b.yaml | 2 +- .../10k-1-topic-512-partition-16p-16c-1kb.yaml | 2 +- .../10k-1-topic-512-partition-16p-16c-64kb.yaml | 2 +- .../10k-1-topic-64-partition-4p-4c-100b.yaml | 2 +- .../10k-1-topic-64-partition-4p-4c-1kb.yaml | 2 +- .../10k-1-topic-64-partition-4p-4c-64kb.yaml | 2 +- .../1-topic-1-partition/20k-1-topic-1-partition-1p-1c-100b.yaml | 2 +- .../1-topic-1-partition/20k-1-topic-1-partition-1p-1c-1kb.yaml | 2 +- .../1-topic-1-partition/20k-1-topic-1-partition-1p-1c-64kb.yaml | 2 +- .../20k-1-topic-16-partition-1p-1c-100b.yaml | 2 +- .../20k-1-topic-16-partition-1p-1c-1kb.yaml | 2 +- .../20k-1-topic-16-partition-1p-1c-64kb.yaml | 2 +- .../20k-1-topic-512-partition-16p-16c-100b.yaml | 2 +- .../20k-1-topic-512-partition-16p-16c-64kb.yaml | 2 +- .../20k-topic-512-partition-16p-16c-1kb.yaml | 2 +- .../20k-1-topic-64-partition-4p-4c-100b.yaml | 2 +- .../20k-1-topic-64-partition-4p-4c-1kb.yaml | 2 +- .../20k-1-topic-64-partition-4p-4c-64kb.yaml | 2 +- .../1-topic-1-partition/50k-1-topic-1-partition-1p-1c-100b.yaml | 2 +- .../1-topic-1-partition/50k-1-topic-1-partition-1p-1c-1kb.yaml | 2 +- .../1-topic-1-partition/50k-1-topic-1-partition-1p-1c-64kb.yaml | 2 +- .../50k-1-topic-16-partition-1p-1c-100b.yaml | 2 +- .../50k-1-topic-16-partition-1p-1c-1kb.yaml | 2 +- .../50k-1-topic-16-partition-1p-1c-64kb.yaml | 2 +- .../50k-1-topic-512-partition-16p-16c-100b.yaml | 2 +- .../50k-1-topic-512-partition-16p-16c-1kb.yaml | 2 +- .../50k-1-topic-512-partition-16p-16c-64kb.yaml | 2 +- .../50k-1-topic-64-partition-4p-4c-100b.yaml | 2 +- .../50k-1-topic-64-partition-4p-4c-1kb.yaml | 2 +- .../50k-1-topic-64-partition-4p-4c-64kb.yaml | 2 +- .../1-topic-1-partition/max-1-topic-1-partition-1p-1c-100b.yaml | 2 +- .../1-topic-1-partition/max-1-topic-1-partition-1p-1c-1kb.yaml | 2 +- .../1-topic-1-partition/max-1-topic-1-partition-1p-1c-64kb.yaml | 2 +- .../max-1-topic-16-partition-1p-1c-100b.yaml | 2 +- .../max-1-topic-16-partition-1p-1c-1kb.yaml | 2 +- .../max-1-topic-16-partition-1p-1c-64kb.yaml | 2 +- .../max-1-topic-512-partition-16p-16c-100b.yaml | 2 +- .../max-1-topic-512-partition-16p-16c-1kb.yaml | 2 +- .../max-1-topic-512-partition-16p-16c-64kb.yaml | 2 +- .../max-1-topic-64-partition-4p-4c-100b.yaml | 2 +- .../max-1-topic-64-partition-4p-4c-1kb.yaml | 2 +- .../max-1-topic-64-partition-4p-4c-64kb.yaml | 2 +- 60 files changed, 60 insertions(+), 60 deletions(-) diff --git a/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-100b.yaml index 59225c523..18caba3fc 100644 --- a/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-100b.yaml +++ b/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 100000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-1kb.yaml index e03db728d..c22207d83 100644 --- a/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-1kb.yaml +++ b/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 100000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-64kb.yaml index 550074b27..b56597046 100644 --- a/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-64kb.yaml +++ b/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 100000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-100b.yaml index cd15e0e9f..df0ea989f 100644 --- a/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-100b.yaml +++ b/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 100000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-1kb.yaml index 048890dea..83ca0cd32 100644 --- a/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-1kb.yaml +++ b/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 100000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-64kb.yaml index e45c40349..4b6549932 100644 --- a/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-64kb.yaml +++ b/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 100000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-100b.yaml index 8014bb22e..e65b723d6 100644 --- a/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 100000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-1kb.yaml index 8ae2b07c6..7eed7934c 100644 --- a/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 100000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-64kb.yaml index b4177faae..457cf634a 100644 --- a/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 100000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-100b.yaml index 696df6163..0cfc90f05 100644 --- a/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-100b.yaml +++ b/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 100000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-1kb.yaml index b6484636c..fe1c721a2 100644 --- a/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-1kb.yaml +++ b/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 100000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-64kb.yaml index c996debaf..4a7e0d04a 100644 --- a/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-64kb.yaml +++ b/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 100000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-100b.yaml index a7675a990..b4f55aee4 100644 --- a/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-100b.yaml +++ b/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 10000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-1kb.yaml index e1cc1f553..0f0777c96 100644 --- a/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-1kb.yaml +++ b/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 10000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-64kb.yaml index 6e0e9ab41..aa87838cd 100644 --- a/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-64kb.yaml +++ b/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 10000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-100b.yaml index c5d2b26f7..9ec8a0280 100644 --- a/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-100b.yaml +++ b/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 10000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-1kb.yaml index 14d757335..e493f375e 100644 --- a/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-1kb.yaml +++ b/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 10000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-64kb.yaml index b9a1ae35b..81c941b30 100644 --- a/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-64kb.yaml +++ b/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 10000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-100b.yaml index 4382dbc8a..64a9cdff6 100644 --- a/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 10000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-1kb.yaml index f7df18917..152938437 100644 --- a/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 10000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-64kb.yaml index 65ecaa2c1..1f7b52828 100644 --- a/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 10000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-100b.yaml index b30d8d29d..01f344063 100644 --- a/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-100b.yaml +++ b/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 10000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-1kb.yaml index b24de524e..46d308ebf 100644 --- a/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-1kb.yaml +++ b/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 10000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-64kb.yaml index d5b04c3a7..b13fa6f7d 100644 --- a/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-64kb.yaml +++ b/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 10000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-100b.yaml index 8f12f92cb..c1f4a5458 100644 --- a/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-100b.yaml +++ b/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 20000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-1kb.yaml index b18343b55..3ca3eb90e 100644 --- a/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-1kb.yaml +++ b/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 20000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-64kb.yaml index 13a01400e..955e0082a 100644 --- a/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-64kb.yaml +++ b/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 20000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-100b.yaml index 5d2a13a63..6f2b8c5d7 100644 --- a/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-100b.yaml +++ b/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 20000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-1kb.yaml index d874272c5..7986cf713 100644 --- a/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-1kb.yaml +++ b/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 20000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-64kb.yaml index 4174cd951..a71ed214d 100644 --- a/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-64kb.yaml +++ b/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 20000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-100b.yaml index 22009d5e8..b91a93660 100644 --- a/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 20000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-64kb.yaml index 0880acea3..daf52493b 100644 --- a/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 20000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-512-partition/20k-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/20k/1-topic-512-partition/20k-topic-512-partition-16p-16c-1kb.yaml index a559f59b9..2d3322b7e 100644 --- a/workloads/asp/20k/1-topic-512-partition/20k-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/20k/1-topic-512-partition/20k-topic-512-partition-16p-16c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 20000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-100b.yaml index 031158c26..2c2460c8a 100644 --- a/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-100b.yaml +++ b/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 20000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-1kb.yaml index 744e0026f..33625a9aa 100644 --- a/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-1kb.yaml +++ b/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 20000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-64kb.yaml index 9466daaa8..307ef2fe8 100644 --- a/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-64kb.yaml +++ b/workloads/asp/20k/1-topic-64-partition/20k-1-topic-64-partition-4p-4c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 20000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-100b.yaml index 78ffdfd48..d2c223475 100644 --- a/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-100b.yaml +++ b/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 50000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-1kb.yaml index 29a1b7ced..82c1db95c 100644 --- a/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-1kb.yaml +++ b/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 50000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-64kb.yaml index 0cd4478d9..dde610b2f 100644 --- a/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-64kb.yaml +++ b/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 50000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-100b.yaml index 5e1199ea6..004b7eb00 100644 --- a/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-100b.yaml +++ b/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 50000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-1kb.yaml index 1e3ac18dd..d72c74704 100644 --- a/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-1kb.yaml +++ b/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 50000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-64kb.yaml index 8e1e01586..ef2982ebc 100644 --- a/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-64kb.yaml +++ b/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 50000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-100b.yaml index 11e8045db..39cfa0a5c 100644 --- a/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 50000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-1kb.yaml index b3f0ad33d..72db6f847 100644 --- a/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 50000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-64kb.yaml index da0ed0a4a..4210b3ce9 100644 --- a/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 50000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-100b.yaml index 38af07e0d..39bf6a831 100644 --- a/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-100b.yaml +++ b/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 50000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-1kb.yaml index 5be11d8c7..4a44acbe7 100644 --- a/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-1kb.yaml +++ b/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 50000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-64kb.yaml index 266109a08..9ff686163 100644 --- a/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-64kb.yaml +++ b/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 50000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-100b.yaml b/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-100b.yaml index 5612695cd..7386ccdb4 100644 --- a/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-100b.yaml +++ b/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 10000000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-1kb.yaml b/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-1kb.yaml index b01a568bf..fab949ef2 100644 --- a/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-1kb.yaml +++ b/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 10000000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-64kb.yaml b/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-64kb.yaml index ba9a08415..259ab4eb5 100644 --- a/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-64kb.yaml +++ b/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 10000000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-100b.yaml b/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-100b.yaml index d4e45c526..264561ec3 100644 --- a/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-100b.yaml +++ b/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 10000000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-1kb.yaml b/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-1kb.yaml index 214e61837..7b684473b 100644 --- a/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-1kb.yaml +++ b/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 10000000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-64kb.yaml b/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-64kb.yaml index f6e8e4aca..e10ee641a 100644 --- a/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-64kb.yaml +++ b/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 1 producersPerTopic: 1 producerRate: 10000000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-100b.yaml index 47d5143ac..287fa5c18 100644 --- a/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 10000000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-1kb.yaml index f9ffa8f76..82fe0e91c 100644 --- a/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 10000000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-64kb.yaml index 0aa6c4248..e768e0040 100644 --- a/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 16 producersPerTopic: 16 producerRate: 10000000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-100b.yaml b/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-100b.yaml index 84a8f55fd..2bb032f46 100644 --- a/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-100b.yaml +++ b/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-100b.yaml @@ -23,5 +23,5 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 10000000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-1kb.yaml b/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-1kb.yaml index 824d1ac06..7bd55c945 100644 --- a/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-1kb.yaml +++ b/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-1kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 10000000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-64kb.yaml b/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-64kb.yaml index 5c27189eb..e1d545c07 100644 --- a/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-64kb.yaml +++ b/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-64kb.yaml @@ -23,4 +23,4 @@ consumerPerSubscription: 4 producersPerTopic: 4 producerRate: 10000000 consumerBacklogSizeGB: 0 -testDurationMinutes: 15 +testDurationMinutes: 10 From 259892910ac1c3ae7de8a64cc023a3d66cd69bef Mon Sep 17 00:00:00 2001 From: dao-jun Date: Thu, 25 Jul 2024 02:29:36 +0800 Subject: [PATCH 21/29] rename file --- ...6p-16c-1kb.yaml => 20k-1-topic-512-partition-16p-16c-1kb.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename workloads/asp/20k/1-topic-512-partition/{20k-topic-512-partition-16p-16c-1kb.yaml => 20k-1-topic-512-partition-16p-16c-1kb.yaml} (100%) diff --git a/workloads/asp/20k/1-topic-512-partition/20k-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-1kb.yaml similarity index 100% rename from workloads/asp/20k/1-topic-512-partition/20k-topic-512-partition-16p-16c-1kb.yaml rename to workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-1kb.yaml From 8cb7f0b151221b313012403715e5c24c34e96217 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Thu, 25 Jul 2024 23:46:27 +0800 Subject: [PATCH 22/29] fix workload file name --- .../100k-1-topic-512-partition-16p-16c-100b.yaml | 2 +- .../100k-1-topic-512-partition-16p-16c-1kb.yaml | 2 +- .../100k-1-topic-512-partition-16p-16c-64kb.yaml | 2 +- .../10k-1-topic-512-partition-16p-16c-100b.yaml | 2 +- .../10k-1-topic-512-partition-16p-16c-1kb.yaml | 2 +- .../10k-1-topic-512-partition-16p-16c-64kb.yaml | 2 +- .../20k-1-topic-512-partition-16p-16c-100b.yaml | 2 +- .../20k-1-topic-512-partition-16p-16c-1kb.yaml | 2 +- .../20k-1-topic-512-partition-16p-16c-64kb.yaml | 2 +- .../50k-1-topic-512-partition-16p-16c-100b.yaml | 2 +- .../50k-1-topic-512-partition-16p-16c-1kb.yaml | 2 +- .../50k-1-topic-512-partition-16p-16c-64kb.yaml | 2 +- .../max-1-topic-512-partition-16p-16c-100b.yaml | 2 +- .../max-1-topic-512-partition-16p-16c-1kb.yaml | 2 +- .../max-1-topic-512-partition-16p-16c-64kb.yaml | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-100b.yaml index e65b723d6..c0869f589 100644 --- a/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 100k-1-topic-512-partition-4p-4c-100b +name: 100k-1-topic-512-partition-16p-16c-100b topics: 1 partitionsPerTopic: 512 diff --git a/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-1kb.yaml index 7eed7934c..dbc8a96a8 100644 --- a/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-1kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 100k-1-topic-512-partition-4p-4c-1kb +name: 100k-1-topic-512-partition-16p-16c-1kb topics: 1 partitionsPerTopic: 512 diff --git a/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-64kb.yaml index 457cf634a..516c09f86 100644 --- a/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-64kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 100k-1-topic-512-partition-4p-4c-1kb +name: 100k-1-topic-512-partition-16p-16c-1kb topics: 1 partitionsPerTopic: 512 diff --git a/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-100b.yaml index 64a9cdff6..81e01201a 100644 --- a/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 10k-1-topic-512-partition-4p-4c-100b +name: 10k-1-topic-512-partition-16p-16c-100b topics: 1 partitionsPerTopic: 512 diff --git a/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-1kb.yaml index 152938437..061f26454 100644 --- a/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-1kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 10k-1-topic-512-partition-4p-4c-1kb +name: 10k-1-topic-512-partition-16p-16c-1kb topics: 1 partitionsPerTopic: 512 diff --git a/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-64kb.yaml index 1f7b52828..821fe72e1 100644 --- a/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-64kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 10k-1-topic-512-partition-4p-4c-1kb +name: 10k-1-topic-512-partition-16p-16c-1kb topics: 1 partitionsPerTopic: 512 diff --git a/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-100b.yaml index b91a93660..286135874 100644 --- a/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 20k-1-topic-512-partition-4p-4c-100b +name: 20k-1-topic-512-partition-16p-16c-100b topics: 1 partitionsPerTopic: 512 diff --git a/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-1kb.yaml index 2d3322b7e..63b17f747 100644 --- a/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-1kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 20k-1-topic-512-partition-4p-4c-1kb +name: 20k-1-topic-512-partition-16p-16c-1kb topics: 1 partitionsPerTopic: 512 diff --git a/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-64kb.yaml index daf52493b..7ab4a04e6 100644 --- a/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-64kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 20k-1-topic-512-partition-4p-4c-1kb +name: 20k-1-topic-512-partition-16p-16c-1kb topics: 1 partitionsPerTopic: 512 diff --git a/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-100b.yaml index 39cfa0a5c..af2d22da8 100644 --- a/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 50k-1-topic-512-partition-4p-4c-100b +name: 50k-1-topic-512-partition-16p-16c-100b topics: 1 partitionsPerTopic: 512 diff --git a/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-1kb.yaml index 72db6f847..e50e8bce2 100644 --- a/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-1kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 50k-1-topic-512-partition-4p-4c-1kb +name: 50k-1-topic-512-partition-16p-16c-1kb topics: 1 partitionsPerTopic: 512 diff --git a/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-64kb.yaml index 4210b3ce9..ae65dd949 100644 --- a/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-64kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: 50k-1-topic-512-partition-4p-4c-1kb +name: 50k-1-topic-512-partition-16p-16c-1kb topics: 1 partitionsPerTopic: 512 diff --git a/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-100b.yaml b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-100b.yaml index 287fa5c18..ffe1e2a41 100644 --- a/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-100b.yaml +++ b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-100b.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: max-rate-1-topic-512-partition-4p-4c-100b +name: max-rate-1-topic-512-partition-16p-16c-100b topics: 1 partitionsPerTopic: 512 diff --git a/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-1kb.yaml b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-1kb.yaml index 82fe0e91c..b155bef56 100644 --- a/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-1kb.yaml +++ b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-1kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: max-rate-1-topic-512-partition-4p-4c-1kb +name: max-rate-1-topic-512-partition-16p-16c-1kb topics: 1 partitionsPerTopic: 512 diff --git a/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-64kb.yaml b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-64kb.yaml index e768e0040..9fb15676b 100644 --- a/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-64kb.yaml +++ b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-64kb.yaml @@ -12,7 +12,7 @@ # limitations under the License. # -name: max-rate-1-topic-512-partition-4p-4c-1kb +name: max-rate-1-topic-512-partition-16p-16c-1kb topics: 1 partitionsPerTopic: 512 From 85f21a7e77b37ca6870ebfb5cc3211356594be2e Mon Sep 17 00:00:00 2001 From: dao-jun Date: Thu, 25 Jul 2024 23:48:55 +0800 Subject: [PATCH 23/29] fix KoP workload file --- driver-kop/kafka_to_kafka_asp_perf.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/driver-kop/kafka_to_kafka_asp_perf.yaml b/driver-kop/kafka_to_kafka_asp_perf.yaml index 750a2e46f..8aed54001 100644 --- a/driver-kop/kafka_to_kafka_asp_perf.yaml +++ b/driver-kop/kafka_to_kafka_asp_perf.yaml @@ -41,8 +41,8 @@ pulsarConfig: kafkaConfig: | bootstrap.servers=192.168.0.58:9092 acks=all - linger.ms=10 - batch.size=1048576 + linger.ms=1 + batch.size=131072 group.id=benchGroup auto.offset.reset=earliest enable.auto.commit=false From ca92bb12354c40d3ef6ec0b82a837fa301ad34d9 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Fri, 26 Jul 2024 00:04:05 +0800 Subject: [PATCH 24/29] fix KoP driver --- driver-kop/kafka_to_kafka_asp_perf.yaml | 3 +++ .../benchmark/driver/kop/KopBenchmarkDriver.java | 12 ++++++++++-- .../benchmark/driver/kop/config/PulsarConfig.java | 5 +++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/driver-kop/kafka_to_kafka_asp_perf.yaml b/driver-kop/kafka_to_kafka_asp_perf.yaml index 8aed54001..3e32aab76 100644 --- a/driver-kop/kafka_to_kafka_asp_perf.yaml +++ b/driver-kop/kafka_to_kafka_asp_perf.yaml @@ -20,7 +20,10 @@ consumerType: kafka # Pulsar configs pulsarConfig: + httpServiceUrl: http://192.168.0.58:8080 serviceUrl: pulsar://192.168.0.58:6650 + authPluginClassName: org.apache.pulsar.client.impl.auth.AuthenticationToken + authParamsString: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.uHMshd2yCvUPTrq7RQDkrzkl_fyyrAE7y_WxGaoCLgA # producer configs batchingEnabled: true batchingMaxPublishDelayMs: 1 diff --git a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java index 34955467b..03464f0e9 100644 --- a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java +++ b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java @@ -52,6 +52,7 @@ import org.apache.kafka.common.serialization.StringDeserializer; import org.apache.kafka.common.serialization.StringSerializer; import org.apache.pulsar.client.admin.PulsarAdmin; +import org.apache.pulsar.client.admin.PulsarAdminBuilder; import org.apache.pulsar.client.api.Consumer; import org.apache.pulsar.client.api.ConsumerBuilder; import org.apache.pulsar.client.api.ProducerBuilder; @@ -105,8 +106,7 @@ public void initialize(File configurationFile, StatsLogger statsLogger) throws I final PulsarConfig pulsarConfig = config.pulsarConfig; - try (PulsarAdmin admin1 = - PulsarAdmin.builder().serviceHttpUrl(pulsarConfig.serviceUrl).build()) { + try (PulsarAdmin admin1 = getPulsarAdmin(pulsarConfig)) { // Set namespace policies PulsarConfig.PersistentConfig pc = pulsarConfig.persistent; admin1.namespaces().setDeduplicationStatus("public/default", pc.deduplicationEnabled); @@ -236,6 +236,14 @@ public void close() throws Exception { } } + private PulsarAdmin getPulsarAdmin(PulsarConfig config) throws PulsarClientException { + PulsarAdminBuilder builder = PulsarAdmin.builder().serviceHttpUrl(config.httpServiceUrl); + if (config.authPluginClassName != null) { + builder.authentication(config.authPluginClassName, config.authParams); + } + return builder.build(); + } + private PulsarClient getPulsarClient(String serviceUrl) throws PulsarClientException { if (client == null) { client = PulsarClient.builder().serviceUrl(serviceUrl).build(); diff --git a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java index d4b190cce..345231b50 100644 --- a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java +++ b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java @@ -17,6 +17,11 @@ public class PulsarConfig { public String serviceUrl; + public String httpServiceUrl; + + public String authPluginClassName; + public String authParams; + // producer configs public boolean batchingEnabled = true; public boolean blockIfQueueFull = true; From fe36c34107248b4a91e7c9fb770188641a0264a7 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Fri, 26 Jul 2024 00:09:49 +0800 Subject: [PATCH 25/29] fix KoP driver --- .../openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java | 2 +- .../openmessaging/benchmark/driver/kop/config/PulsarConfig.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java index 03464f0e9..289f5593b 100644 --- a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java +++ b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java @@ -239,7 +239,7 @@ public void close() throws Exception { private PulsarAdmin getPulsarAdmin(PulsarConfig config) throws PulsarClientException { PulsarAdminBuilder builder = PulsarAdmin.builder().serviceHttpUrl(config.httpServiceUrl); if (config.authPluginClassName != null) { - builder.authentication(config.authPluginClassName, config.authParams); + builder.authentication(config.authPluginClassName, config.authParamsString); } return builder.build(); } diff --git a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java index 345231b50..50d02f0c5 100644 --- a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java +++ b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/PulsarConfig.java @@ -20,7 +20,7 @@ public class PulsarConfig { public String httpServiceUrl; public String authPluginClassName; - public String authParams; + public String authParamsString; // producer configs public boolean batchingEnabled = true; From 0f8313355730689fa621e48c6e2e42e0c5c4cefe Mon Sep 17 00:00:00 2001 From: dao-jun Date: Fri, 26 Jul 2024 00:14:25 +0800 Subject: [PATCH 26/29] fix KoP driver --- driver-kop/kafka_to_kafka_asp_perf.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/driver-kop/kafka_to_kafka_asp_perf.yaml b/driver-kop/kafka_to_kafka_asp_perf.yaml index 3e32aab76..05c9a4712 100644 --- a/driver-kop/kafka_to_kafka_asp_perf.yaml +++ b/driver-kop/kafka_to_kafka_asp_perf.yaml @@ -42,7 +42,7 @@ pulsarConfig: # Kafka configs kafkaConfig: | - bootstrap.servers=192.168.0.58:9092 + bootstrap.servers=PLAINTEXT://192.168.0.54:9092 acks=all linger.ms=1 batch.size=131072 From 09b57656a78715691a0d442d4dd134700e4d1bd3 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Sun, 4 Aug 2024 15:48:44 +0800 Subject: [PATCH 27/29] add 16k payload workload files. --- payload/payload-16kb.data | 1 + .../100k-1-topic-1-partition-1p-1c-16kb.yaml | 26 +++++++++++++++++++ .../100k-1-topic-16-partition-1p-1c-16kb.yaml | 26 +++++++++++++++++++ ...0k-1-topic-512-partition-16p-16c-16kb.yaml | 26 +++++++++++++++++++ .../100k-1-topic-64-partition-4p-4c-16kb.yaml | 26 +++++++++++++++++++ .../10k-1-topic-1-partition-1p-1c-16kb.yaml | 26 +++++++++++++++++++ .../10k-1-topic-16-partition-1p-1c-16kb.yaml | 26 +++++++++++++++++++ ...0k-1-topic-512-partition-16p-16c-16kb.yaml | 26 +++++++++++++++++++ .../10k-1-topic-64-partition-4p-4c-16kb.yaml | 26 +++++++++++++++++++ .../20k-1-topic-1-partition-1p-1c-16kb.yaml | 26 +++++++++++++++++++ .../20k-1-topic-16-partition-1p-1c-16kb.yaml | 26 +++++++++++++++++++ ...0k-1-topic-512-partition-16p-16c-16kb.yaml | 26 +++++++++++++++++++ .../10k-1-topic-64-partition-4p-4c-16kb.yaml | 26 +++++++++++++++++++ .../50k-1-topic-1-partition-1p-1c-16kb.yaml | 26 +++++++++++++++++++ .../50k-1-topic-16-partition-1p-1c-16kb.yaml | 26 +++++++++++++++++++ ...0k-1-topic-512-partition-16p-16c-16kb.yaml | 26 +++++++++++++++++++ .../50k-1-topic-64-partition-4p-4c-16kb.yaml | 26 +++++++++++++++++++ .../max-1-topic-1-partition-1p-1c-16kb.yaml | 26 +++++++++++++++++++ .../max-1-topic-16-partition-1p-1c-16kb.yaml | 26 +++++++++++++++++++ ...ax-1-topic-512-partition-16p-16c-16kb.yaml | 26 +++++++++++++++++++ .../max-1-topic-64-partition-4p-4c-16kb.yaml | 26 +++++++++++++++++++ 21 files changed, 521 insertions(+) create mode 100644 payload/payload-16kb.data create mode 100644 workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-16kb.yaml create mode 100644 workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-16kb.yaml create mode 100644 workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-16kb.yaml create mode 100644 workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-16kb.yaml create mode 100644 workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-16kb.yaml create mode 100644 workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-16kb.yaml create mode 100644 workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-16kb.yaml create mode 100644 workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-16kb.yaml create mode 100644 workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-16kb.yaml create mode 100644 workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-16kb.yaml create mode 100644 workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-16kb.yaml create mode 100644 workloads/asp/20k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-16kb.yaml create mode 100644 workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-16kb.yaml create mode 100644 workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-16kb.yaml create mode 100644 workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-16kb.yaml create mode 100644 workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-16kb.yaml create mode 100644 workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-16kb.yaml create mode 100644 workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-16kb.yaml create mode 100644 workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-16kb.yaml create mode 100644 workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-16kb.yaml diff --git a/payload/payload-16kb.data b/payload/payload-16kb.data new file mode 100644 index 000000000..a33cfa584 --- /dev/null +++ b/payload/payload-16kb.data @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-16kb.yaml b/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-16kb.yaml new file mode 100644 index 000000000..c0c520e58 --- /dev/null +++ b/workloads/asp/100k/1-topic-1-partition/100k-1-topic-1-partition-1p-1c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-1-partition-1p-1c-16kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-16kb.yaml b/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-16kb.yaml new file mode 100644 index 000000000..7a2662bce --- /dev/null +++ b/workloads/asp/100k/1-topic-16-partition/100k-1-topic-16-partition-1p-1c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-16-partition-1p-1c-16kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-16kb.yaml b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-16kb.yaml new file mode 100644 index 000000000..89675be8c --- /dev/null +++ b/workloads/asp/100k/1-topic-512-partition/100k-1-topic-512-partition-16p-16c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-512-partition-16p-16c-16kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-16kb.yaml b/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-16kb.yaml new file mode 100644 index 000000000..51ee829a4 --- /dev/null +++ b/workloads/asp/100k/1-topic-64-partition/100k-1-topic-64-partition-4p-4c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 100k-1-topic-64-partition-4p-4c-16kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-16kb.yaml b/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-16kb.yaml new file mode 100644 index 000000000..bf61d8688 --- /dev/null +++ b/workloads/asp/10k/1-topic-1-partition/10k-1-topic-1-partition-1p-1c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-1-partition-1p-1c-16kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-16kb.yaml b/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-16kb.yaml new file mode 100644 index 000000000..979ee6f66 --- /dev/null +++ b/workloads/asp/10k/1-topic-16-partition/10k-1-topic-16-partition-1p-1c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-16-partition-1p-1c-16kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-16kb.yaml b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-16kb.yaml new file mode 100644 index 000000000..bb466374f --- /dev/null +++ b/workloads/asp/10k/1-topic-512-partition/10k-1-topic-512-partition-16p-16c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-512-partition-16p-16c-16kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-16kb.yaml b/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-16kb.yaml new file mode 100644 index 000000000..cd7ee4827 --- /dev/null +++ b/workloads/asp/10k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 10k-1-topic-64-partition-4p-4c-16kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-16kb.yaml b/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-16kb.yaml new file mode 100644 index 000000000..1774ba0c4 --- /dev/null +++ b/workloads/asp/20k/1-topic-1-partition/20k-1-topic-1-partition-1p-1c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 20k-1-topic-1-partition-1p-1c-16kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 20000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-16kb.yaml b/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-16kb.yaml new file mode 100644 index 000000000..870507b53 --- /dev/null +++ b/workloads/asp/20k/1-topic-16-partition/20k-1-topic-16-partition-1p-1c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 20k-1-topic-16-partition-1p-1c-16kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 20000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-16kb.yaml b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-16kb.yaml new file mode 100644 index 000000000..9b7286db5 --- /dev/null +++ b/workloads/asp/20k/1-topic-512-partition/20k-1-topic-512-partition-16p-16c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 20k-1-topic-512-partition-16p-16c-16kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 20000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/20k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-16kb.yaml b/workloads/asp/20k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-16kb.yaml new file mode 100644 index 000000000..3085d9893 --- /dev/null +++ b/workloads/asp/20k/1-topic-64-partition/10k-1-topic-64-partition-4p-4c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 20k-1-topic-64-partition-4p-4c-16kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 20000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-16kb.yaml b/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-16kb.yaml new file mode 100644 index 000000000..cdc087e39 --- /dev/null +++ b/workloads/asp/50k/1-topic-1-partition/50k-1-topic-1-partition-1p-1c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 50k-1-topic-1-partition-1p-1c-16kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 50000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-16kb.yaml b/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-16kb.yaml new file mode 100644 index 000000000..ea7f09b7b --- /dev/null +++ b/workloads/asp/50k/1-topic-16-partition/50k-1-topic-16-partition-1p-1c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 50k-1-topic-16-partition-1p-1c-16kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 50000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-16kb.yaml b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-16kb.yaml new file mode 100644 index 000000000..315a7bbb2 --- /dev/null +++ b/workloads/asp/50k/1-topic-512-partition/50k-1-topic-512-partition-16p-16c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 50k-1-topic-512-partition-16p-16c-16kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 50000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-16kb.yaml b/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-16kb.yaml new file mode 100644 index 000000000..2f6e8de09 --- /dev/null +++ b/workloads/asp/50k/1-topic-64-partition/50k-1-topic-64-partition-4p-4c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 50k-1-topic-64-partition-4p-4c-16kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 50000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-16kb.yaml b/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-16kb.yaml new file mode 100644 index 000000000..f725d4de8 --- /dev/null +++ b/workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-1-partition-1p-1c-16kb + +topics: 1 +partitionsPerTopic: 1 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-16kb.yaml b/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-16kb.yaml new file mode 100644 index 000000000..9434cfba8 --- /dev/null +++ b/workloads/asp/max/1-topic-16-partition/max-1-topic-16-partition-1p-1c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-16-partition-1p-1c-16kb + +topics: 1 +partitionsPerTopic: 16 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-16kb.yaml b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-16kb.yaml new file mode 100644 index 000000000..731a41595 --- /dev/null +++ b/workloads/asp/max/1-topic-512-partition/max-1-topic-512-partition-16p-16c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-512-partition-16p-16c-16kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 diff --git a/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-16kb.yaml b/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-16kb.yaml new file mode 100644 index 000000000..cccd839d8 --- /dev/null +++ b/workloads/asp/max/1-topic-64-partition/max-1-topic-64-partition-4p-4c-16kb.yaml @@ -0,0 +1,26 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: max-rate-1-topic-64-partition-4p-4c-16kb + +topics: 1 +partitionsPerTopic: 64 +messageSize: 16384 +payloadFile: "payload/payload-16kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 From 3337f7a86edf5cb72cb8199409d3780296e02089 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Mon, 5 Aug 2024 19:59:38 +0800 Subject: [PATCH 28/29] Add Pulsar/KoP 331 driver files --- driver-kop/kafka_to_kafka_asp_perf_331.yaml | 52 +++++++++++++++++++++ driver-pulsar/pulsar_asp_perf_331.yaml | 51 ++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 driver-kop/kafka_to_kafka_asp_perf_331.yaml create mode 100644 driver-pulsar/pulsar_asp_perf_331.yaml diff --git a/driver-kop/kafka_to_kafka_asp_perf_331.yaml b/driver-kop/kafka_to_kafka_asp_perf_331.yaml new file mode 100644 index 000000000..811928112 --- /dev/null +++ b/driver-kop/kafka_to_kafka_asp_perf_331.yaml @@ -0,0 +1,52 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: Kafka producer and Pulsar consumer +driverClass: io.openmessaging.benchmark.driver.kop.KopBenchmarkDriver + +producerType: kafka +consumerType: kafka + +# Pulsar configs +pulsarConfig: + httpServiceUrl: http://192.168.0.58:8080 + serviceUrl: pulsar://192.168.0.58:6650 + authPluginClassName: org.apache.pulsar.client.impl.auth.AuthenticationToken + authParamsString: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.uHMshd2yCvUPTrq7RQDkrzkl_fyyrAE7y_WxGaoCLgA + # producer configs + batchingEnabled: true + batchingMaxPublishDelayMs: 1 + batchingMaxBytes: 1048576 + blockIfQueueFull: true + pendingQueueSize: 1000 + maxPendingMessagesAcrossPartitions: 50000 + # consumer configs + maxTotalReceiverQueueSizeAcrossPartitions: 50000 + receiverQueueSize: 1000 + persistent: + ensembleSize: 3 + writeQuorumSize: 3 + ackQuorumSize: 1 + enableDeduplication: false + +# Kafka configs +kafkaConfig: | + bootstrap.servers=PLAINTEXT://192.168.0.54:9092 + acks=all + linger.ms=1 + batch.size=131072 + group.id=benchGroup + auto.offset.reset=earliest + enable.auto.commit=false + max.partition.fetch.bytes=1048576 diff --git a/driver-pulsar/pulsar_asp_perf_331.yaml b/driver-pulsar/pulsar_asp_perf_331.yaml new file mode 100644 index 000000000..b625057cd --- /dev/null +++ b/driver-pulsar/pulsar_asp_perf_331.yaml @@ -0,0 +1,51 @@ +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: Pulsar +driverClass: io.openmessaging.benchmark.driver.pulsar.PulsarBenchmarkDriver + +# Pulsar client-specific configuration +client: + serviceUrl: pulsar://192.168.0.58:6650 + httpUrl: http://192.168.0.58:8080 + ioThreads: 16 + connectionsPerBroker: 8 + clusterName: kop-performance-test + namespacePrefix: benchmark/ns + topicType: persistent + persistence: + ensembleSize: 3 + writeQuorum: 3 + ackQuorum: 1 + deduplicationEnabled: false + tlsAllowInsecureConnection: false + tlsEnableHostnameVerification: false + tlsTrustCertsFilePath: + authentication: + plugin: org.apache.pulsar.client.impl.auth.AuthenticationToken + data: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.uHMshd2yCvUPTrq7RQDkrzkl_fyyrAE7y_WxGaoCLgA + +# Producer configuration +producer: + batchingEnabled: true + batchingMaxPublishDelayMs: 1 + batchingMaxBytes: 131072 + blockIfQueueFull: true + pendingQueueSize: 0 + batchingPartitionSwitchFrequencyByPublishDelay: 2 + +consumer: + receiverQueueSize: 10000 + subscriptionType: Failover + maxTotalReceiverQueueSizeAcrossPartitions: 5000000 \ No newline at end of file From 5d8ae077eb87c38a8863612b1d9a8732248a1408 Mon Sep 17 00:00:00 2001 From: dao-jun Date: Fri, 9 Aug 2024 12:57:43 +0800 Subject: [PATCH 29/29] misc --- .../BenchmarkTestResultResolver.java | 168 ++++++ doc/performance_test.md | 516 +++++++++++++----- driver-kafka/kafka-ack-all-nofsync.yaml | 8 +- .../benchmark/driver/kafka/Config.java | 2 + .../driver/kafka/KafkaBenchmarkDriver.java | 35 +- .../driver/kop/KopBenchmarkDriver.java | 29 +- .../benchmark/driver/kop/config/Config.java | 2 + .../driver/pulsar/PulsarBenchmarkDriver.java | 30 +- .../driver/pulsar/config/PulsarConfig.java | 2 + .../rocketmq/RocketMQBenchmarkDriver.java | 20 + .../rocketmq/client/RocketMQClientConfig.java | 2 + 11 files changed, 652 insertions(+), 162 deletions(-) create mode 100644 benchmark-framework/src/main/java/io/openmessaging/benchmark/BenchmarkTestResultResolver.java diff --git a/benchmark-framework/src/main/java/io/openmessaging/benchmark/BenchmarkTestResultResolver.java b/benchmark-framework/src/main/java/io/openmessaging/benchmark/BenchmarkTestResultResolver.java new file mode 100644 index 000000000..3f14e0db3 --- /dev/null +++ b/benchmark-framework/src/main/java/io/openmessaging/benchmark/BenchmarkTestResultResolver.java @@ -0,0 +1,168 @@ +package io.openmessaging.benchmark; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.commons.io.FileUtils; +import org.apache.kafka.common.protocol.types.Field; + +import java.io.File; +import java.io.FileFilter; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.stream.Collectors; + +public class BenchmarkTestResultResolver { + public static void main(String[] args) { + File dir = new File("/Users/daojun/Desktop/performace_test_result"); + Map>>> result = new HashMap<>(); + System.out.println(dir.exists()); + for (File file : dir.listFiles(new Filter())) { + String driverName = file.getName(); + Map>> driverResult = new HashMap<>(); + for (File subFile : file.listFiles(new Filter())) { + String rate = subFile.getName(); + Map> rateResult = new HashMap<>(); + for (File subSubFile : subFile.listFiles(new Filter())) { + String partitions = subSubFile.getName(); + Map> partitionResult = new HashMap<>(); + List topicResult = new ArrayList<>(); + if (subSubFile.isDirectory()) { + for (File topicFile : subSubFile.listFiles(new Filter())) { + try { + TestResult testResult = parseTestResult(topicFile); + topicResult.add(testResult); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + partitionResult.put(partitions, topicResult); + rateResult.put(partitions, topicResult); + } + + driverResult.put(rate, rateResult); + } + + result.put(driverName, driverResult); + } + + generateReport(result); + + System.out.println(); + + } + + private static TestResult parseTestResult(File file) throws Exception { + String str = FileUtils.readFileToString(file, "UTF-8"); + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.readValue(str, TestResult.class); + } + + private static class Filter implements FileFilter { + @Override + public boolean accept(File pathname) { + return !pathname.getAbsolutePath().contains("DS_Store"); + } + } + + + + private static void generateReport(Map>>> result) { + Map>> kop = result.get("kop"); + Map>> pulsar = result.get("pulsar"); + Map>> kop331 = result.get("kop331"); + Map>> pulsar331 = result.get("pulsar331"); + + Map>> kafka = result.get("kafka"); + Map>> kafkaAck1 = result.get("kafka_ack1"); + Map>> pulsarNoJournal = result.get("pulsar_no_journal"); + Map>> pulsarNoJournal331 = result.get("pulsar_no_journal_331"); + + List rates = Arrays.asList("10k", "50k", "100k", "maxrate"); + for (String rate : rates) { + System.out.println("### Publish rate: " + rate); + Map> kopRate = kop.get(rate); + Map> pulsarRate = pulsar.get(rate); + Map> kop331Rate = kop331.get(rate); + Map> pulsar331Rate = pulsar331.get(rate); + + Map> kafkaRate = kafka.get(rate); + Map> kafkaAck1Rate = kafkaAck1.get(rate); + Map> pulsarNoJournalRate = pulsarNoJournal.get(rate); + Map> pulsarNoJournal331Rate = pulsarNoJournal331.get(rate); + + List partitions = Arrays.asList("1-topic-1-partition", "1-topic-16-partition", "1-topic-64-partition", "1-topic-512-partition"); + for (String partition : partitions) { + System.out.println("#### Topic partitions: " + partition); + Map kopPartition = kopRate.get(partition).stream().collect(Collectors.toMap(TestResult::getMessageSize, x -> x)); + Map pulsarPartition = pulsarRate.get(partition).stream().collect(Collectors.toMap(TestResult::getMessageSize, x -> x)); + Map kop331Partition = kop331Rate.get(partition).stream().collect(Collectors.toMap(TestResult::getMessageSize, x -> x)); + Map pulsar331Partition = pulsar331Rate.get(partition).stream().collect(Collectors.toMap(TestResult::getMessageSize, x -> x)); + + Map kafkaPartiton = kafkaRate.get(partition).stream().collect(Collectors.toMap(TestResult::getMessageSize, x -> x)); + Map kafkaAck1Partition = kafkaAck1Rate.get(partition).stream().collect(Collectors.toMap(TestResult::getMessageSize, x -> x)); + Map pulsarNoJournalPartition = pulsarNoJournalRate.get(partition).stream().collect(Collectors.toMap(TestResult::getMessageSize, x -> x)); + Map pulsarNoJournal331Partition = pulsarNoJournal331Rate.get(partition).stream().collect(Collectors.toMap(TestResult::getMessageSize, x -> x)); + + Set payloadSizes = new TreeSet<>(kopPartition.keySet()); + payloadSizes.addAll(pulsarPartition.keySet()); + payloadSizes.addAll(kop331Partition.keySet()); + payloadSizes.addAll(pulsar331Partition.keySet()); + + for (Long payloadSize : payloadSizes) { + TestResult kopResult = kopPartition.get(payloadSize); + TestResult pulsarResult = pulsarPartition.get(payloadSize); + TestResult kop331Result = kop331Partition.get(payloadSize); + TestResult pulsar331Result = pulsar331Partition.get(payloadSize); + + TestResult kafkaResult = kafkaPartiton.get(payloadSize); + TestResult kafkaAck1Result = kafkaAck1Partition.get(payloadSize); + TestResult pulsarNoJournalResult = pulsarNoJournalPartition.get(payloadSize); + TestResult pulsarNoJournal331Result = pulsarNoJournal331Partition.get(payloadSize); + + System.out.println("##### Payload size: " + payloadSize + " bytes"); + System.out.println("| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate |"); + System.out.println("| -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- |"); + printResult(kopResult, "KOP"); + printResult(pulsarResult, "Pulsar"); + printResult(kop331Result, "KOP331"); + printResult(pulsar331Result, "Pulsar331"); + + printResult(kafkaResult, "Kafka"); + printResult(kafkaAck1Result, "Kafka Ack1"); + printResult(pulsarNoJournalResult, "Pulsar No Journal"); + printResult(pulsarNoJournal331Result, "Pulsar No Journal 331"); + } + } + } + } + + public static void printResult(TestResult result, String driverName) { + if (null == result) { + System.out.println("|" + driverName + "| N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |"); + } else { + System.out.println("|" + driverName + "| " + trimDoubleValue(result.aggregatedPublishLatencyAvg) + " | " + + trimDoubleValue(result.aggregatedPublishLatency95pct) + " | " + trimDoubleValue(result.aggregatedPublishLatency99pct) + + " | " + trimDoubleValue(result.aggregatedPublishLatency999pct) + " | " + trimDoubleValue(result.aggregatedPublishLatencyMax) + + " | " + trimDoubleValue(getAvgPublishRate(result)) + " | " + trimDoubleValue(result.aggregatedEndToEndLatencyAvg) + + " | " + trimDoubleValue(result.aggregatedEndToEndLatency95pct) + " | " + trimDoubleValue(result.aggregatedEndToEndLatency99pct) + + " | " + trimDoubleValue(result.aggregatedEndToEndLatency999pct) + " | " + trimDoubleValue(result.aggregatedEndToEndLatencyMax) + + "|" + trimDoubleValue(getAvgConsumeRate(result)) + " |"); + } + } + + public static double trimDoubleValue(double value) { + BigDecimal bd = new BigDecimal(value); + bd = bd.setScale(2, RoundingMode.HALF_DOWN); + return bd.doubleValue(); + } + + + public static double getAvgPublishRate(TestResult result) { + return result.publishRate.stream().mapToDouble(Double::doubleValue).average().orElse(0); + } + + public static double getAvgConsumeRate(TestResult result) { + return result.consumeRate.stream().mapToDouble(Double::doubleValue).average().orElse(0); + } +} diff --git a/doc/performance_test.md b/doc/performance_test.md index 89f57e8f1..2e47c75bd 100644 --- a/doc/performance_test.md +++ b/doc/performance_test.md @@ -11,129 +11,129 @@ KoP, Pulsar, Kafka, KoP Proxy ## 3. 测试环境 - 硬件配置 - - CPU: VCPU 4 - - Memory: 32GB - - 网络: 1Gbps - - 磁盘: 1TB SSD * 2 (Read: MB/s, Write: MB/s) + - CPU: VCPU 4 + - Memory: 32GB + - 网络: 1Gbps + - 磁盘: 1TB SSD * 2 (Read: MB/s, Write: MB/s) - 软件配置 - - OS: CentOS 7.9 - - Java: Oracle JDK 17 - - Pulsar: [2.10.7.1](https://github.com/ascentstream/pulsar/releases/tag/v2.10.7.1) - - Kafka: 3.4.1 - - KoP: [2.10.7.1](https://github.com/ascentstream/asp-kop/releases/tag/v2.10.7.1) - - Bookkeeper: 4.14.8 - - Zookeeper: 3.9.2 - - [OpenMessaging benchmark](https://github.com/ascentstream/benchmark) 0.0.1 + - OS: CentOS 7.9 + - Java: Oracle JDK 17 + - Pulsar: [2.10.7.1](https://github.com/ascentstream/pulsar/releases/tag/v2.10.7.1) + - Kafka: 3.4.1 + - KoP: [2.10.7.1](https://github.com/ascentstream/asp-kop/releases/tag/v2.10.7.1) + - Bookkeeper: 4.14.8 + - Zookeeper: 3.9.2 + - [OpenMessaging benchmark](https://github.com/ascentstream/benchmark) 0.0.1 ## 4. 测试部署 - 硬件需求 - - 5台机器,每台机器配置[如上](#3-测试环境) + - 5台机器,每台机器配置[如上](#3-测试环境) - 部署方式 - - Pulsar/KoP + - Pulsar/KoP ![pulsar.png](./Pulsar_KoP.png) - - Kafka + - Kafka ![kafka.png](./kafka.png) ## 5. 相关核心配置 - Durability Level - - Level1: - - KoP/Pulsar: - - Replication: SYNC(ensemble=3, writeQuorum=3, ackQuorum=2) - - Bookkeeper(ASYNC): - - Enable journaling - - journalWriteData=true - - journalSyncData=false - - Disable journaling - - journalWriteData=false - - journalSyncData=false - - Kafka: - - Replication: SYNC(ack=all, min.insync.replicas=2) - - Log: ASYNC(log.flush.interval.messages=10000, log.flush.interval.ms=1000) - - Level2: - - KoP/Pulsar: - - Replication: ASYNC(ensemble=3, writeQuorum=3, ackQuorum=1) - - Bookkeeper(ASYNC): - - Enable journaling - - journalWriteData=true - - journalSyncData=false - - Disable journaling - - journalWriteData=false - - journalSyncData=false - - Kafka: - - Replication: ASYNC(ack=1, min.insync.replicas=2) - - Log: ASYNC(log.flush.interval.messages=10000, log.flush.interval.ms=1000) + - Level1: + - KoP/Pulsar: + - Replication: SYNC(ensemble=3, writeQuorum=3, ackQuorum=2) + - Bookkeeper(ASYNC): + - Enable journaling + - journalWriteData=true + - journalSyncData=false + - Disable journaling + - journalWriteData=false + - journalSyncData=false + - Kafka: + - Replication: SYNC(ack=all, min.insync.replicas=2) + - Log: ASYNC(log.flush.interval.messages=10000, log.flush.interval.ms=1000) + - Level2: + - KoP/Pulsar: + - Replication: ASYNC(ensemble=3, writeQuorum=3, ackQuorum=1) + - Bookkeeper(ASYNC): + - Enable journaling + - journalWriteData=true + - journalSyncData=false + - Disable journaling + - journalWriteData=false + - journalSyncData=false + - Kafka: + - Replication: ASYNC(ack=1, min.insync.replicas=2) + - Log: ASYNC(log.flush.interval.messages=10000, log.flush.interval.ms=1000) - Pulsar - - Broker.conf - - ```properties - managedLedgerNewEntriesCheckDelayInMillis=0 - bookkeeperNumberOfChannelsPerBookie=64 - - # use sync replication mode - managedLedgerDefaultEnsembleSize=3 - managedLedgerDefaultWriteQuorum=3 - managedLedgerDefaultAckQuorum=2 - ``` - - Bookkeeper.conf - - ```properties - journalPageCacheFlushIntervalMSec=1000 - - # disable/enable journaling - journalWriteData=false/true - journalSyncData=false - ``` - - Broker JVM options - - ```text - -Xmx6G -Xms6G -XX:MaxDirectMemorySize=6G - ``` - - Bookkeeper JVM options - - ```text - -Xmx6G -Xms6G -XX:MaxDirectMemorySize=6G - ``` - - Client Settings - - ```properties - # Producer - batchingPartitionSwitchFrequencyByPublishDelay=2 - # Consumer - maxTotalReceiverQueueSizeAcrossPartitions=5000000 - ``` + - Broker.conf + + ```properties + managedLedgerNewEntriesCheckDelayInMillis=0 + bookkeeperNumberOfChannelsPerBookie=64 + + # use sync replication mode + managedLedgerDefaultEnsembleSize=3 + managedLedgerDefaultWriteQuorum=3 + managedLedgerDefaultAckQuorum=2 + ``` + - Bookkeeper.conf + + ```properties + journalPageCacheFlushIntervalMSec=1000 + + # disable/enable journaling + journalWriteData=false/true + journalSyncData=false + ``` + - Broker JVM options + + ```text + -Xmx6G -Xms6G -XX:MaxDirectMemorySize=6G + ``` + - Bookkeeper JVM options + + ```text + -Xmx6G -Xms6G -XX:MaxDirectMemorySize=6G + ``` + - Client Settings + + ```properties + # Producer + batchingPartitionSwitchFrequencyByPublishDelay=2 + # Consumer + maxTotalReceiverQueueSizeAcrossPartitions=5000000 + ``` - KoP - - 基本设置如Pulsar - - KoP设置 + - 基本设置如Pulsar + - KoP设置 - ```properties - entryFormat=kafka - ``` + ```properties + entryFormat=kafka + ``` - Kafka - - Broker.conf + - Broker.conf - ```properties - ``` - - Broker JVM options + ```properties + ``` + - Broker JVM options - ```text - -Xmx12G -Xms12G -XX:MaxDirectMemorySize=12G - ``` + ```text + -Xmx12G -Xms12G -XX:MaxDirectMemorySize=12G + ``` - Benchmark - - Driver config - - [Pulsar](../driver-pulsar/pulsar_asp_perf.yaml) - - [KoP](../driver-kop/kafka_to_kafka_asp_perf.yaml) - - [Kafka](../driver-kafka/kafka-ack-all-nofsync.yaml) + - Driver config + - [Pulsar](../driver-pulsar/pulsar_asp_perf.yaml) + - [KoP](../driver-kop/kafka_to_kafka_asp_perf.yaml) + - [Kafka](../driver-kafka/kafka-ack-all-nofsync.yaml) ## 6. 测试场景 - 场景 -| 场景 | Topics | Partitions per topic | Producers | Subscriptions | Consumers per subscription | Message Size | Workload | +| 场景 | Topics | Partitions per topic | Producers | Subscriptions | Consumers per subscription | Message Size | Workload | |----|--------|----------------------|-----------|---------------|----------------------------|--------------|------------------------------------------------------------------------------------------------------------------------------| | 1 | 1 | 1 | 1 | 1 | 1 | 100B | [1-topic-1-partition-1p-1c-100b](../workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-100b.yaml) | | 2 | 1 | 1 | 1 | 1 | 1 | 1KB | [1-topic-1-partition-1p-1c-1kb](../workloads/asp/max/1-topic-1-partition/max-1-topic-1-partition-1p-1c-1kb.yaml) | @@ -153,54 +153,292 @@ KoP, Pulsar, Kafka, KoP Proxy 增加Catch-up read测试 - 测试步骤 - - 启动Pulsar/KoP/Kafka集群 - - 启动benchmark driver - - 运行测试场景 - - 结果分析 + - 启动Pulsar/KoP/Kafka集群 + - 启动benchmark driver + - 运行测试场景 + - 结果分析 - 关注指标 - - 吞吐量 - - Publish Throughput(Message, Byte) - - Consume Throughput(Message, Byte) - - 延迟: - - Publish Latency(AVG, MAX, P90, P99, P999) - - End-to-End Latency(AVG, MAX, P90, P99, P999) + - 吞吐量 + - Publish Throughput(Message, Byte) + - Consume Throughput(Message, Byte) + - 延迟: + - Publish Latency(AVG, MAX, P90, P99, P999) + - End-to-End Latency(AVG, MAX, P90, P99, P999) ## 7. 测试数据 - 场景1 - - Pulsar - - Enable journaling - - Benchmark result: - - CPU: - - Memory: - - Disk: - - Disable journaling - - Benchmark result: - - CPU: - - Memory: - - Disk: - - KoP - - Enable journaling - - Benchmark result: - - CPU: - - Memory: - - Disk: - - Disable journaling - - Benchmark result: - - CPU: - - Memory: - - Disk: - - Kafka - - Benchmark result: - - CPU: - - Memory: - - Disk: - -## 8. 结果分析 - -TODO - -## 9. 参考文档 + - Pulsar + - Enable journaling + - Benchmark result: + - CPU: + - Memory: + - Disk: + - Disable journaling + - Benchmark result: + - CPU: + - Memory: + - Disk: + - KoP + - Enable journaling + - Benchmark result: + - CPU: + - Memory: + - Disk: + - Disable journaling + - Benchmark result: + - CPU: + - Memory: + - Disk: + - Kafka + - Benchmark result: + - CPU: + - Memory: + - Disk: + +## 8. 原始结果数据 + +## 9. 优化过后的结果数据 + +### Publish rate: 10k + +#### Topic partitions: 1-topic-1-partition + +##### Payload size: 16384 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | 2.02 | 2.59 | 2.89 | 20.7 | 59.18 | 10001.48 | 2.73 | 3.0 | 5.0 | 27.0 | 71.0 | 10001.48 | +| Pulsar | 1.78 | 2.48 | 2.65 | 2.94 | 20.92 | 10001.71 | 2.43 | 3.0 | 3.0 | 4.0 | 24.0 | 10001.71 | +| KOP331 | 1.77 | 2.47 | 2.68 | 11.52 | 89.14 | 10002.25 | 2.38 | 3.0 | 4.0 | 15.0 | 90.0 | 10002.26 | +| Pulsar331 | 1.48 | 2.26 | 2.4 | 2.73 | 38.39 | 10002.03 | 2.16 | 3.0 | 3.0 | 4.0 | 50.0 | 10002.04 | +| Kafka | 228.2 | 242.9 | 282.19 | 295.16 | 305.21 | 7859.15 | 228.49 | 243.0 | 282.0 | 295.0 | 306.0 | 7859.15 | +| Kafka Ack1 | 1.33 | 1.26 | 17.18 | 57.43 | 136.5 | 10001.6 | 3.21 | 5.0 | 48.0 | 82.0 | 180.0 | 10001.6 | +| Pulsar No Journal | 1.04 | 1.32 | 1.41 | 14.55 | 140.83 | 10002.53 | 1.65 | 2.0 | 2.0 | 18.0 | 141.0 | 10002.5 | +| Pulsar No Journal 331 | 0.9 | 1.16 | 1.23 | 33.01 | 169.42 | 10003.29 | 1.45 | 2.0 | 2.0 | 44.0 | 181.0 | 10003.26 | + +#### Topic partitions: 1-topic-16-partition + +##### Payload size: 16384 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | 1.95 | 2.57 | 2.77 | 9.37 | 57.45 | 10001.69 | 2.65 | 3.0 | 4.0 | 16.0 | 61.0 | 10001.7 | +| Pulsar | 1.91 | 2.51 | 2.64 | 3.19 | 25.57 | 10001.58 | 2.46 | 3.0 | 3.0 | 4.0 | 31.0 | 10001.57 | +| KOP331 | 1.65 | 2.37 | 2.59 | 4.98 | 85.02 | 10002.07 | 2.34 | 3.0 | 4.0 | 11.0 | 86.0 | 10002.08 | +| Pulsar331 | 1.58 | 2.25 | 2.47 | 2.83 | 77.78 | 10001.47 | 2.06 | 3.0 | 3.0 | 4.0 | 79.0 | 10001.46 | +| Kafka | 6.25 | 3.46 | 68.2 | 966.65 | 2564.93 | 10001.93 | 6.61 | 4.0 | 70.0 | 969.0 | 2568.01 | 10001.94 | +| Kafka Ack1 | 1.46 | 1.22 | 1.35 | 173.26 | 1034.79 | 10001.36 | 5.97 | 2.0 | 61.0 | 830.0 | 1890.01 | 10001.35 | +| Pulsar No Journal | 1.11 | 1.44 | 1.55 | 1.97 | 102.21 | 10002.86 | 1.62 | 2.0 | 2.0 | 3.0 | 103.0 | 10002.88 | +| Pulsar No Journal 331 | 0.98 | 1.32 | 1.4 | 1.63 | 148.13 | 10003.62 | 1.62 | 2.0 | 2.0 | 2.0 | 150.0 | 10003.62 | + +#### Topic partitions: 1-topic-64-partition + +##### Payload size: 16384 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | 2.03 | 2.65 | 2.91 | 12.23 | 74.14 | 10002.04 | 3.23 | 4.0 | 6.0 | 38.0 | 387.0 | 10002.05 | +| Pulsar | 1.93 | 2.53 | 2.68 | 3.22 | 41.14 | 10001.71 | 2.49 | 3.0 | 3.0 | 4.0 | 41.0 | 10001.69 | +| KOP331 | 1.73 | 2.46 | 2.74 | 7.67 | 82.11 | 10002.25 | 3.29 | 5.0 | 6.0 | 30.0 | 172.0 | 10002.24 | +| Pulsar331 | 1.59 | 2.25 | 2.48 | 2.87 | 34.33 | 10001.85 | 2.06 | 3.0 | 3.0 | 4.0 | 35.0 | 10001.85 | +| Kafka | 2.76 | 3.98 | 19.1 | 94.13 | 525.42 | 10001.95 | 3.17 | 4.0 | 21.0 | 116.0 | 528.0 | 10001.93 | +| Kafka Ack1 | 0.95 | 1.24 | 1.36 | 32.37 | 212.07 | 10002.42 | 2.35 | 3.0 | 12.0 | 70.0 | 217.0 | 10002.45 | +| Pulsar No Journal | 1.17 | 1.51 | 1.62 | 1.98 | 93.11 | 10004.01 | 1.64 | 2.0 | 2.0 | 3.0 | 98.0 | 10004.01 | +| Pulsar No Journal 331 | 0.99 | 1.33 | 1.42 | 1.7 | 116.88 | 10003.27 | 1.74 | 2.0 | 2.0 | 3.0 | 1115.01 | 10003.25 | + +#### Topic partitions: 1-topic-512-partition + +##### Payload size: 16384 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | 2.32 | 2.96 | 3.78 | 35.9 | 155.09 | 10002.87 | 13.66 | 20.0 | 26.0 | 98.0 | 518.0 | 10002.86 | +| Pulsar | 1.95 | 2.56 | 2.75 | 4.83 | 73.8 | 10002.55 | 2.52 | 3.0 | 3.0 | 6.0 | 74.0 | 10002.55 | +| KOP331 | 2.21 | 2.81 | 7.0 | 79.57 | 167.53 | 10001.99 | 14.33 | 24.0 | 53.0 | 251.0 | 695.0 | 10001.85 | +| Pulsar331 | 1.59 | 2.25 | 2.5 | 6.21 | 98.66 | 10002.22 | 2.07 | 3.0 | 3.0 | 8.0 | 102.0 | 10002.22 | +| Kafka | 8.29 | 14.11 | 64.48 | 224.34 | 327.21 | 10002.38 | 9.04 | 16.0 | 70.0 | 229.0 | 330.0 | 10002.37 | +| Kafka Ack1 | 1.29 | 1.58 | 11.19 | 37.57 | 221.77 | 10004.02 | 5.43 | 13.0 | 31.0 | 73.0 | 251.0 | 10004.03 | +| Pulsar No Journal | 1.23 | 1.59 | 1.78 | 4.4 | 115.74 | 10003.31 | 1.71 | 2.0 | 2.0 | 6.0 | 118.0 | 10003.31 | +| Pulsar No Journal 331 | 1.0 | 1.32 | 1.42 | 4.28 | 90.31 | 10003.78 | 1.63 | 2.0 | 2.0 | 7.0 | 94.0 | 10003.77 | + +### Publish rate: 100k + +#### Topic partitions: 1-topic-1-partition + +##### Payload size: 100 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | 2.09 | 2.7 | 2.88 | 11.8 | 35.27 | 100023.63 | 2.27 | 3.0 | 3.0 | 16.0 | 40.0 | 100023.63 | +| Pulsar | 1.41 | 2.27 | 2.35 | 6.76 | 37.65 | 100019.97 | 2.08 | 3.0 | 3.0 | 9.0 | 39.0 | 100019.97 | +| KOP331 | 2.1 | 2.73 | 2.93 | 14.47 | 69.78 | 100024.56 | 2.3 | 3.0 | 3.0 | 19.0 | 70.0 | 100024.56 | +| Pulsar331 | 1.17 | 2.21 | 2.35 | 3.69 | 20.38 | 100027.54 | 1.84 | 3.0 | 3.0 | 5.0 | 33.0 | 100027.54 | +| Kafka | 2.12 | 2.71 | 10.69 | 58.81 | 83.41 | 100023.3 | 2.13 | 3.0 | 11.0 | 59.0 | 84.0 | 100023.3 | +| Kafka Ack1 | 0.89 | 1.44 | 1.51 | 14.47 | 63.66 | 100049.33 | 1.51 | 2.0 | 2.0 | 46.0 | 71.0 | 100049.76 | +| Pulsar No Journal | 0.87 | 1.24 | 1.27 | 32.31 | 138.69 | 100043.99 | 1.51 | 2.0 | 2.0 | 35.0 | 139.0 | 100044.33 | +| Pulsar No Journal 331 | 0.8 | 1.22 | 1.26 | 1.49 | 85.34 | 100040.36 | 1.43 | 2.0 | 2.0 | 2.0 | 85.0 | 100040.36 | + +##### Payload size: 1024 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | 2.23 | 2.93 | 3.26 | 23.27 | 92.1 | 100017.31 | 2.82 | 4.0 | 5.0 | 30.0 | 98.0 | 100017.5 | +| Pulsar | 1.81 | 2.6 | 2.72 | 7.36 | 51.25 | 100022.7 | 2.63 | 3.0 | 4.0 | 10.0 | 53.0 | 100022.95 | +| KOP331 | 2.11 | 2.88 | 3.1 | 13.19 | 49.83 | 100022.36 | 2.61 | 3.0 | 4.0 | 23.0 | 50.0 | 100022.67 | +| Pulsar331 | 1.52 | 2.48 | 2.6 | 6.04 | 40.15 | 100020.4 | 2.34 | 3.0 | 3.0 | 9.0 | 51.0 | 100020.23 | +| Kafka | 438.27 | 478.66 | 514.0 | 633.16 | 658.53 | 73615.82 | 438.5 | 479.0 | 514.0 | 633.0 | 659.0 | 73615.82 | +| Kafka Ack1 | 1.17 | 1.74 | 1.85 | 38.67 | 63.11 | 100041.02 | 2.49 | 3.0 | 23.0 | 58.0 | 79.0 | 100057.96 | +| Pulsar No Journal | 1.1 | 1.53 | 1.6 | 1.71 | 86.78 | 100046.72 | 1.84 | 2.0 | 2.0 | 3.0 | 88.0 | 100046.72 | +| Pulsar No Journal 331 | 0.99 | 1.41 | 1.47 | 1.59 | 114.0 | 100046.29 | 1.79 | 2.0 | 2.0 | 3.0 | 114.0 | 100046.29 | + +#### Topic partitions: 1-topic-16-partition + +##### Payload size: 100 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | 2.13 | 2.74 | 2.94 | 14.15 | 56.78 | 100020.76 | 3.12 | 3.0 | 6.0 | 183.0 | 725.0 | 100020.76 | +| Pulsar | 1.52 | 2.37 | 2.47 | 6.1 | 46.59 | 100024.84 | 1.55 | 2.0 | 2.0 | 7.0 | 46.0 | 100024.84 | +| KOP331 | 2.07 | 2.72 | 2.91 | 9.63 | 65.41 | 100018.91 | 2.86 | 3.0 | 4.0 | 176.0 | 329.0 | 100019.09 | +| Pulsar331 | 1.43 | 2.34 | 2.44 | 4.36 | 92.95 | 100017.44 | 1.47 | 2.0 | 2.0 | 5.0 | 93.0 | 100017.44 | +| Kafka | 1.39 | 2.08 | 2.4 | 36.75 | 87.36 | 100019.34 | 1.73 | 2.0 | 4.0 | 61.0 | 419.0 | 100019.34 | +| Kafka Ack1 | 0.89 | 1.44 | 1.52 | 19.75 | 49.44 | 100048.26 | 1.56 | 2.0 | 2.0 | 42.0 | 245.0 | 100048.26 | +| Pulsar No Journal | 0.85 | 1.28 | 1.34 | 1.44 | 84.74 | 100037.75 | 1.01 | 1.0 | 1.0 | 1.0 | 85.0 | 100037.75 | +| Pulsar No Journal 331 | 0.85 | 1.27 | 1.33 | 1.43 | 110.37 | 100045.67 | 1.01 | 1.0 | 1.0 | 1.0 | 111.0 | 100045.33 | + +##### Payload size: 1024 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | 2.26 | 3.0 | 3.24 | 14.82 | 61.28 | 100018.74 | 2.89 | 4.0 | 4.0 | 25.0 | 131.0 | 100018.74 | +| Pulsar | 1.93 | 2.74 | 2.89 | 6.82 | 40.64 | 100020.95 | 2.54 | 3.0 | 3.0 | 9.0 | 41.0 | 100021.11 | +| KOP331 | 2.07 | 2.9 | 3.13 | 15.27 | 133.04 | 100024.92 | 2.72 | 4.0 | 5.0 | 25.0 | 135.0 | 100024.88 | +| Pulsar331 | 1.67 | 2.59 | 2.71 | 4.93 | 98.31 | 100020.13 | 2.34 | 3.0 | 3.0 | 6.0 | 98.0 | 100019.94 | +| Kafka | 3.74 | 2.19 | 22.15 | 584.63 | 1280.28 | 100019.67 | 4.01 | 3.0 | 23.0 | 587.0 | 1283.01 | 100019.87 | +| Kafka Ack1 | 1.18 | 1.73 | 1.85 | 31.33 | 381.46 | 100036.57 | 3.07 | 3.0 | 19.0 | 223.0 | 625.0 | 100036.6 | +| Pulsar No Journal | 1.18 | 1.62 | 1.7 | 1.82 | 64.16 | 100050.51 | 1.45 | 2.0 | 2.0 | 2.0 | 65.0 | 100050.16 | +| Pulsar No Journal 331 | 1.05 | 1.48 | 1.56 | 1.68 | 93.5 | 100051.29 | 1.06 | 1.0 | 2.0 | 2.0 | 95.0 | 100050.97 | + +#### Topic partitions: 1-topic-64-partition + +##### Payload size: 100 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | 2.14 | 2.77 | 3.06 | 15.22 | 57.15 | 100022.05 | 3.49 | 3.0 | 5.0 | 379.0 | 820.0 | 100021.93 | +| Pulsar | 1.52 | 2.31 | 2.41 | 7.82 | 57.16 | 100023.55 | 1.6 | 2.0 | 2.0 | 9.0 | 57.0 | 100023.64 | +| KOP331 | 2.15 | 2.77 | 3.03 | 17.69 | 135.94 | 100023.88 | 3.72 | 3.0 | 7.0 | 390.0 | 528.0 | 100023.9 | +| Pulsar331 | 1.2 | 2.2 | 2.37 | 4.98 | 52.31 | 100024.19 | 1.27 | 2.0 | 2.0 | 6.0 | 52.0 | 100024.19 | +| Kafka | 1.66 | 2.4 | 8.03 | 51.55 | 81.12 | 100021.36 | 2.98 | 2.0 | 20.0 | 421.0 | 1251.01 | 100021.36 | +| Kafka Ack1 | 0.92 | 1.43 | 1.53 | 29.81 | 77.17 | 100054.55 | 2.76 | 2.0 | 13.0 | 336.0 | 1506.01 | 100054.68 | +| Pulsar No Journal | 0.84 | 1.27 | 1.33 | 1.49 | 90.54 | 100058.4 | 1.01 | 1.0 | 1.0 | 2.0 | 90.0 | 100058.4 | +| Pulsar No Journal 331 | 0.83 | 1.26 | 1.32 | 1.58 | 108.7 | 100055.04 | 1.02 | 1.0 | 1.0 | 2.0 | 108.0 | 100054.91 | + +##### Payload size: 1024 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | 2.28 | 2.96 | 3.74 | 21.3 | 76.95 | 100029.71 | 2.99 | 4.0 | 7.0 | 71.0 | 363.0 | 100029.66 | +| Pulsar | 1.68 | 2.46 | 2.58 | 9.2 | 81.91 | 100023.61 | 1.63 | 2.0 | 3.0 | 11.0 | 83.0 | 100023.49 | +| KOP331 | 2.23 | 2.92 | 3.46 | 22.7 | 85.72 | 100027.06 | 3.01 | 4.0 | 7.0 | 93.0 | 435.0 | 100027.14 | +| Pulsar331 | 1.34 | 2.33 | 2.52 | 5.55 | 84.93 | 100023.97 | 1.29 | 2.0 | 2.0 | 7.0 | 84.0 | 100023.82 | +| Kafka | 2.51 | 2.75 | 20.68 | 185.71 | 572.27 | 100021.95 | 2.74 | 3.0 | 23.0 | 188.0 | 567.0 | 100022.07 | +| Kafka Ack1 | 1.05 | 1.64 | 1.82 | 34.74 | 79.29 | 100049.74 | 2.05 | 3.0 | 9.0 | 59.0 | 205.0 | 100049.74 | +| Pulsar No Journal | 1.0 | 1.42 | 1.51 | 2.01 | 136.51 | 100057.22 | 1.03 | 1.0 | 1.0 | 3.0 | 136.0 | 100057.22 | +| Pulsar No Journal 331 | 0.92 | 1.35 | 1.44 | 1.73 | 98.86 | 100057.86 | 1.02 | 1.0 | 1.0 | 2.0 | 99.0 | 100057.59 | + +#### Topic partitions: 1-topic-512-partition + +##### Payload size: 100 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | 2.72 | 3.95 | 14.98 | 59.99 | 108.25 | 100030.27 | 5.4 | 6.0 | 40.0 | 469.0 | 993.0 | 100029.81 | +| Pulsar | 1.75 | 2.4 | 3.02 | 29.81 | 117.85 | 100025.99 | 1.78 | 2.0 | 4.0 | 32.0 | 121.0 | 100025.84 | +| KOP331 | 3.14 | 4.37 | 39.31 | 107.48 | 170.48 | 100035.71 | 9.42 | 10.0 | 249.0 | 502.0 | 1011.0 | 100035.57 | +| Pulsar331 | 1.48 | 2.34 | 2.55 | 25.95 | 87.73 | 100028.43 | 1.5 | 2.0 | 3.0 | 28.0 | 97.0 | 100028.49 | +| Kafka | 13.69 | 17.55 | 26.9 | 72.87 | 149.78 | 100032.97 | 14.81 | 18.0 | 30.0 | 447.0 | 1165.01 | 100033.06 | +| Kafka Ack1 | 1.3 | 2.28 | 3.16 | 23.48 | 77.36 | 100065.82 | 4.73 | 5.0 | 16.0 | 470.0 | 906.0 | 100065.73 | +| Pulsar No Journal | 0.95 | 1.36 | 1.47 | 19.34 | 103.36 | 100058.3 | 1.07 | 1.0 | 2.0 | 21.0 | 104.0 | 100058.23 | +| Pulsar No Journal 331 | 0.94 | 1.37 | 1.48 | 12.95 | 74.0 | 100056.62 | 1.05 | 1.0 | 2.0 | 15.0 | 74.0 | 100055.59 | + +##### Payload size: 1024 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | 3.18 | 5.13 | 17.01 | 68.48 | 158.04 | 100090.36 | 4.72 | 8.0 | 31.0 | 206.0 | 564.0 | 100089.06 | +| Pulsar | 1.97 | 2.52 | 3.97 | 35.05 | 122.99 | 100027.65 | 1.94 | 2.0 | 5.0 | 37.0 | 123.0 | 100027.67 | +| KOP331 | 3.69 | 6.01 | 35.52 | 108.78 | 205.08 | 100080.15 | 5.54 | 9.0 | 58.0 | 272.0 | 544.0 | 100080.45 | +| Pulsar331 | 1.73 | 2.47 | 3.05 | 34.63 | 120.23 | 100030.62 | 1.7 | 2.0 | 4.0 | 37.0 | 120.0 | 100030.82 | +| Kafka | 7.88 | 14.6 | 26.06 | 81.79 | 243.45 | 100046.78 | 7.99 | 15.0 | 27.0 | 89.0 | 511.0 | 100046.79 | +| Kafka Ack1 | 1.53 | 2.75 | 4.27 | 31.73 | 115.11 | 100124.58 | 4.48 | 6.0 | 15.0 | 73.0 | 308.0 | 100125.21 | +| Pulsar No Journal | 1.03 | 1.45 | 1.59 | 21.06 | 118.95 | 100080.35 | 1.08 | 1.0 | 2.0 | 23.0 | 117.0 | 100080.31 | +| Pulsar No Journal 331 | 1.02 | 1.44 | 1.58 | 25.75 | 82.58 | 100072.75 | 1.08 | 1.0 | 2.0 | 28.0 | 84.0 | 100072.4 | + +### Publish rate: maxrate + +#### Topic partitions: 1-topic-1-partition + +##### Payload size: 1024 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | +| Pulsar | 1442.48 | 2485.36 | 2883.31 | 3361.55 | 4136.54 | 181834.4 | 1479.44 | 2579.01 | 2919.01 | 3363.01 | 4138.02 | 181832.33 | +| KOP331 | 205.48 | 235.82 | 2238.24 | 3615.18 | 60000.25 | 123842.2 | 389681.94 | 575078.4 | 578338.81 | 579301.37 | 579407.87 | 15437.01 | +| Pulsar331 | 1449.76 | 3649.09 | 3890.83 | 4490.21 | 4520.19 | 181607.15 | 159690.15 | 559448.06 | 569462.78 | 570843.14 | 570843.14 | 12251.49 | +| Kafka | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | +| Kafka Ack1 | 113.33 | 123.34 | 129.95 | 186.61 | 218.15 | 284675.12 | 62311.23 | 133937.15 | 141913.09 | 144116.73 | 144210.94 | 158114.73 | +| Pulsar No Journal | 1059.99 | 1075.3 | 1120.3 | 1218.21 | 1270.73 | 247505.18 | 1064.32 | 1087.01 | 1123.01 | 1197.01 | 1206.01 | 247504.78 | +| Pulsar No Journal 331 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | + +#### Topic partitions: 1-topic-16-partition + +##### Payload size: 1024 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | +| Pulsar | 1338.96 | 3804.16 | 4151.33 | 5764.57 | 7842.85 | 180142.59 | 5823.04 | 4265.02 | 170926.08 | 233148.42 | 240251.9 | 177516.07 | +| KOP331 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | +| Pulsar331 | 1402.65 | 3827.53 | 4218.72 | 7782.21 | 8863.3 | 181935.3 | 3493.13 | 3902.01 | 50053.12 | 385867.78 | 393273.34 | 174583.07 | +| Kafka | 74.93 | 90.33 | 375.54 | 1298.63 | 2373.04 | 429784.78 | 77.28 | 93.0 | 381.0 | 1295.01 | 2375.01 | 429788.41 | +| Kafka Ack1 | 49.16 | 58.84 | 552.08 | 1657.96 | 3163.78 | 653632.18 | 47985.16 | 201379.84 | 222826.49 | 234328.06 | 237793.28 | 346139.38 | +| Pulsar No Journal | 388.91 | 1119.8 | 1618.22 | 2399.89 | 2651.33 | 564113.82 | 861.51 | 1214.01 | 2111.01 | 179554.3 | 296450.05 | 530104.4 | +| Pulsar No Journal 331 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | + +#### Topic partitions: 1-topic-64-partition + +##### Payload size: 1024 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | +| Pulsar | 1431.05 | 3901.97 | 4051.74 | 4589.69 | 4933.66 | 181914.68 | 1509.89 | 3925.01 | 4116.02 | 4661.02 | 8347.01 | 181912.62 | +| KOP331 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | +| Pulsar331 | 1432.83 | 3869.79 | 3971.98 | 4104.18 | 4370.91 | 182865.13 | 1498.82 | 3893.01 | 4012.01 | 4345.02 | 5037.02 | 182773.48 | +| Kafka | 208.71 | 386.93 | 1337.73 | 6063.71 | 8213.89 | 611939.34 | 225.62 | 477.0 | 1481.01 | 6060.03 | 8213.02 | 612202.98 | +| Kafka Ack1 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | +| Pulsar No Journal | 475.59 | 1219.6 | 1373.7 | 1528.02 | 1904.88 | 536442.67 | 1192.56 | 1279.01 | 1924.01 | 279904.26 | 307488.77 | 529179.49 | +| Pulsar No Journal 331 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | + +#### Topic partitions: 1-topic-512-partition + +##### Payload size: 1024 bytes + +| | AVG Publish Latency | P95 Publish Latency | P99 Publish Latency | P999 Publish Latency | Max Publish Latency | AVG Publish Rate | AVG E2E Latency | P95 E2E Latency | P99 E2E Latency | P999 E2E Latency | Max E2E Latency | AVG Consume Rate | +|-----------------------|---------------------|---------------------|---------------------|----------------------|---------------------|------------------|-----------------|-----------------|-----------------|------------------|-----------------|------------------| +| KOP | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | +| Pulsar | 1433.65 | 3909.9 | 4086.82 | 4737.12 | 5262.46 | 183038.79 | 1492.05 | 3919.01 | 4112.02 | 4835.01 | 46677.25 | 183059.85 | +| KOP331 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | +| Pulsar331 | 1438.34 | 3901.82 | 4066.77 | 4407.14 | 7983.33 | 181923.11 | 1590.29 | 3915.01 | 4108.02 | 60322.05 | 136535.04 | 181921.42 | +| Kafka | 705.4 | 1946.65 | 3180.49 | 4922.65 | 10657.53 | 678635.0 | 710.35 | 1952.01 | 3187.01 | 4931.01 | 10675.01 | 678633.26 | +| Kafka Ack1 | 190.09 | 718.63 | 1133.08 | 1891.77 | 4976.64 | 677913.86 | 13540.88 | 57882.11 | 82197.5 | 93270.01 | 105154.05 | 640765.12 | +| Pulsar No Journal | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | +| Pulsar No Journal 331 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | + +## 10. 参考文档 - [StreamNative: Kafka-Pulsar Performance Test Report](https://github.com/streamnative/openmessaging-benchmark/blob/master/blog/benchmarking-pulsar-kafka-a-more-accurate-perspective-on-pulsar-performance.pdf) - [Confluent: Kafka fastest messaging system](https://www.confluent.io/blog/kafka-fastest-messaging-system/) diff --git a/driver-kafka/kafka-ack-all-nofsync.yaml b/driver-kafka/kafka-ack-all-nofsync.yaml index 77398d5b9..bcbb3ae6d 100644 --- a/driver-kafka/kafka-ack-all-nofsync.yaml +++ b/driver-kafka/kafka-ack-all-nofsync.yaml @@ -23,15 +23,15 @@ topicConfig: | min.insync.replicas=2 commonConfig: | - bootstrap.servers=localhost:9092 + bootstrap.servers=192.168.0.59:9092,192.168.0.58:9092,192.168.0.54:9092 request.timeout.ms=120000 producerConfig: | acks=all - linger.ms=10 - batch.size=1048576 + linger.ms=1 + batch.size=131072 consumerConfig: | group.id=benchGroup auto.offset.reset=earliest enable.auto.commit=false - max.partition.fetch.bytes=1048576 \ No newline at end of file + max.partition.fetch.bytes=131072 \ No newline at end of file diff --git a/driver-kafka/src/main/java/io/openmessaging/benchmark/driver/kafka/Config.java b/driver-kafka/src/main/java/io/openmessaging/benchmark/driver/kafka/Config.java index d2fafafa3..b38af9791 100644 --- a/driver-kafka/src/main/java/io/openmessaging/benchmark/driver/kafka/Config.java +++ b/driver-kafka/src/main/java/io/openmessaging/benchmark/driver/kafka/Config.java @@ -23,4 +23,6 @@ public class Config { public String producerConfig; public String consumerConfig; + + public boolean deleteTopicAfterTest = false; } diff --git a/driver-kafka/src/main/java/io/openmessaging/benchmark/driver/kafka/KafkaBenchmarkDriver.java b/driver-kafka/src/main/java/io/openmessaging/benchmark/driver/kafka/KafkaBenchmarkDriver.java index a2789ac2a..6b8772a52 100644 --- a/driver-kafka/src/main/java/io/openmessaging/benchmark/driver/kafka/KafkaBenchmarkDriver.java +++ b/driver-kafka/src/main/java/io/openmessaging/benchmark/driver/kafka/KafkaBenchmarkDriver.java @@ -24,13 +24,7 @@ import java.io.File; import java.io.IOException; import java.io.StringReader; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; +import java.util.*; import java.util.concurrent.CompletableFuture; import org.apache.bookkeeper.stats.StatsLogger; import org.apache.kafka.clients.admin.AdminClient; @@ -42,9 +36,12 @@ import org.apache.kafka.common.serialization.ByteArraySerializer; import org.apache.kafka.common.serialization.StringDeserializer; import org.apache.kafka.common.serialization.StringSerializer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class KafkaBenchmarkDriver implements BenchmarkDriver { + private static final Logger log = LoggerFactory.getLogger(KafkaBenchmarkDriver.class); private Config config; private List producers = Collections.synchronizedList(new ArrayList<>()); @@ -56,6 +53,8 @@ public class KafkaBenchmarkDriver implements BenchmarkDriver { private AdminClient admin; + private final Set topics = new HashSet<>(); + @Override public void initialize(File configurationFile, StatsLogger statsLogger) throws IOException { config = mapper.readValue(configurationFile, Config.class); @@ -101,7 +100,13 @@ public CompletableFuture createTopics(List topicInfos) { Map topicConfigs = new HashMap<>((Map) topicProperties); KafkaTopicCreator topicCreator = new KafkaTopicCreator(admin, topicConfigs, config.replicationFactor); - return topicCreator.create(topicInfos); + + return topicCreator.create(topicInfos) + .thenAccept(__ -> { + for (TopicInfo topicInfo : topicInfos) { + topics.add(topicInfo.getTopic()); + } + }); } @Override @@ -148,9 +153,23 @@ public void close() throws Exception { for (BenchmarkConsumer consumer : consumers) { consumer.close(); } + + deleteTopics(); admin.close(); } + private void deleteTopics() { + if (!config.deleteTopicAfterTest) { + return; + } + + try { + admin.deleteTopics(topics).all().get(); + } catch (Exception ex) { + log.error("Failed to delete topics", ex); + } + } + private static final ObjectMapper mapper = new ObjectMapper(new YAMLFactory()) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); diff --git a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java index 289f5593b..102780cf4 100644 --- a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java +++ b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/KopBenchmarkDriver.java @@ -32,10 +32,7 @@ import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Properties; +import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.TimeUnit; @@ -83,6 +80,8 @@ public class KopBenchmarkDriver implements BenchmarkDriver { private ProducerBuilder producerBuilder = null; private ConsumerBuilder consumerBuilder = null; + private final Set topics = new HashSet<>(); + public static Config loadConfig(File file) throws IOException { return mapper.readValue(file, Config.class); } @@ -159,6 +158,7 @@ public CompletableFuture createTopic(String topic, int partitions) { .whenComplete( (result, throwable) -> { if (throwable == null) { + topics.add(topic); future.complete(result); } else { future.completeExceptionally(throwable); @@ -234,6 +234,27 @@ public void close() throws Exception { if (client != null) { client.close(); } + + deleteTopics(); + + log.info("KopBenchmarkDriver closed successfully"); + } + + private void deleteTopics() { + if (!config.deleteTopicsAfterTest) { + return; + } + + List> futures = new ArrayList<>(); + + try (PulsarAdmin admin1 = getPulsarAdmin(config.pulsarConfig)) { + for (String topic : topics) { + futures.add(admin1.topics().deleteAsync(topic)); + } + CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).get(); + } catch (Throwable ex) { + log.error("Failed to delete topics", ex); + } } private PulsarAdmin getPulsarAdmin(PulsarConfig config) throws PulsarClientException { diff --git a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/Config.java b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/Config.java index 36cc4b0fe..80d377ed0 100644 --- a/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/Config.java +++ b/driver-kop/src/main/java/io/openmessaging/benchmark/driver/kop/config/Config.java @@ -28,6 +28,8 @@ public class Config { public PulsarConfig pulsarConfig; public String kafkaConfig; + public boolean deleteTopicsAfterTest = false; + public Properties getKafkaProperties() { if (StringUtils.isEmpty(kafkaConfig)) { throw new IllegalArgumentException(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG + " is not set"); diff --git a/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java b/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java index d4cb0b7bd..d45805648 100644 --- a/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java +++ b/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/PulsarBenchmarkDriver.java @@ -29,10 +29,7 @@ import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Random; +import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -65,6 +62,8 @@ public class PulsarBenchmarkDriver implements BenchmarkDriver { private String namespace; private ProducerBuilder producerBuilder; + private final Set topics = new HashSet<>(); + @Override public void initialize(File configurationFile, StatsLogger statsLogger) throws IOException { this.config = readConfig(configurationFile); @@ -189,10 +188,10 @@ public String getTopicNamePrefix() { public CompletableFuture createTopic(String topic, int partitions) { if (partitions == 1) { // No-op - return adminClient.topics().createNonPartitionedTopicAsync(topic); + return adminClient.topics().createNonPartitionedTopicAsync(topic).thenAccept(__ -> topics.add(topic)); } - return adminClient.topics().createPartitionedTopicAsync(topic, partitions); + return adminClient.topics().createPartitionedTopicAsync(topic, partitions).thenAccept(__ -> topics.add(topic)); } @Override @@ -250,13 +249,30 @@ public void close() throws Exception { client.close(); } + deleteTopics(); if (adminClient != null) { adminClient.close(); } - log.info("Pulsar benchmark driver successfully shut down"); } + private void deleteTopics() { + if (!config.deleteTopicsAfterTest || adminClient == null) { + return; + } + + List> futures = new ArrayList<>(); + for (String topic : topics) { + futures.add(adminClient.topics().deleteAsync(topic)); + } + try { + FutureUtil.waitForAll(futures).get(); + adminClient.namespaces().deleteNamespace(namespace); + } catch (Exception e) { + log.error("Failed to delete topics", e); + } + } + private static final ObjectMapper mapper = new ObjectMapper(new YAMLFactory()) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); diff --git a/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/config/PulsarConfig.java b/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/config/PulsarConfig.java index 8bcb24622..885a077df 100644 --- a/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/config/PulsarConfig.java +++ b/driver-pulsar/src/main/java/io/openmessaging/benchmark/driver/pulsar/config/PulsarConfig.java @@ -18,4 +18,6 @@ public class PulsarConfig { public PulsarClientConfig client = new PulsarClientConfig(); public PulsarProducerConfig producer = new PulsarProducerConfig(); public PulsarConsumerConfig consumer = new PulsarConsumerConfig(); + + public boolean deleteTopicsAfterTest = false; } diff --git a/driver-rocketmq/src/main/java/io/openmessaging/benchmark/driver/rocketmq/RocketMQBenchmarkDriver.java b/driver-rocketmq/src/main/java/io/openmessaging/benchmark/driver/rocketmq/RocketMQBenchmarkDriver.java index ccad035fd..d59823264 100644 --- a/driver-rocketmq/src/main/java/io/openmessaging/benchmark/driver/rocketmq/RocketMQBenchmarkDriver.java +++ b/driver-rocketmq/src/main/java/io/openmessaging/benchmark/driver/rocketmq/RocketMQBenchmarkDriver.java @@ -26,6 +26,7 @@ import io.openmessaging.benchmark.driver.rocketmq.client.RocketMQClientConfig; import java.io.File; import java.io.IOException; +import java.util.HashSet; import java.util.Map; import java.util.Random; import java.util.Set; @@ -61,6 +62,8 @@ public class RocketMQBenchmarkDriver implements BenchmarkDriver { DefaultMQProducer rmqProducer; private RPCHook rpcHook; + private final Set topics = new HashSet<>(); + @Override public void initialize(final File configurationFile, final StatsLogger statsLogger) throws IOException { @@ -137,6 +140,7 @@ public CompletableFuture createTopic(final String topic, final int partiti for (String brokerAddr : brokerList) { this.rmqAdmin.createAndUpdateTopicConfig(brokerAddr, topicConfig); + topics.add(topic); } } catch (Exception e) { throw new RuntimeException( @@ -240,9 +244,25 @@ public void close() throws Exception { if (this.rmqProducer != null) { this.rmqProducer.shutdown(); } + + deleteTopics(); this.rmqAdmin.shutdown(); } + private void deleteTopics() { + if (!rmqClientConfig.deleteTopicAfterTest) { + return; + } + + for (String topic : topics) { + try { + this.rmqAdmin.deleteTopic(topic, this.rmqClientConfig.clusterName); + } catch (Exception e) { + log.error("Failed to delete topic [{}]", topic, e); + } + } + } + private static final ObjectMapper mapper = new ObjectMapper(new YAMLFactory()) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); diff --git a/driver-rocketmq/src/main/java/io/openmessaging/benchmark/driver/rocketmq/client/RocketMQClientConfig.java b/driver-rocketmq/src/main/java/io/openmessaging/benchmark/driver/rocketmq/client/RocketMQClientConfig.java index 26cb109bb..b73fbce85 100644 --- a/driver-rocketmq/src/main/java/io/openmessaging/benchmark/driver/rocketmq/client/RocketMQClientConfig.java +++ b/driver-rocketmq/src/main/java/io/openmessaging/benchmark/driver/rocketmq/client/RocketMQClientConfig.java @@ -29,4 +29,6 @@ public class RocketMQClientConfig { public Integer backpressureConcurrency; public String accessKey; public String secretKey; + + public boolean deleteTopicAfterTest = false; }