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/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" diff --git a/doc/Pulsar_KoP.png b/doc/Pulsar_KoP.png new file mode 100644 index 000000000..4164a5dc6 Binary files /dev/null and b/doc/Pulsar_KoP.png differ diff --git a/doc/kafka.png b/doc/kafka.png new file mode 100644 index 000000000..d4a1606d0 Binary files /dev/null and b/doc/kafka.png differ diff --git a/doc/performance_test.md b/doc/performance_test.md new file mode 100644 index 000000000..2e47c75bd --- /dev/null +++ b/doc/performance_test.md @@ -0,0 +1,445 @@ +# KoP性能测试 + +## 1. 测试范围 + +KoP, Pulsar, Kafka, KoP Proxy + +## 2. 测试工具 + +[OpenMessaging benchmark](https://github.com/ascentstream/benchmark) + +## 3. 测试环境 + +- 硬件配置 + - 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 + +## 4. 测试部署 + +- 硬件需求 + - 5台机器,每台机器配置[如上](#3-测试环境) +- 部署方式 + - Pulsar/KoP + + ![pulsar.png](./Pulsar_KoP.png) + + - 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) +- 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 + ``` +- KoP + - 基本设置如Pulsar + - KoP设置 + + ```properties + entryFormat=kafka + ``` +- Kafka + - 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) + +## 6. 测试场景 + +- 场景 + +| 场景 | 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) | +| 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) | + +- 后续规划 + +增加Catch-up read测试 + +- 测试步骤 + - 启动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) + +## 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. 原始结果数据 + +## 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 new file mode 100644 index 000000000..bcbb3ae6d --- /dev/null +++ b/driver-kafka/kafka-ack-all-nofsync.yaml @@ -0,0 +1,37 @@ +# +# 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 +driverClass: io.openmessaging.benchmark.driver.kafka.KafkaBenchmarkDriver + +# Kafka client-specific configuration +replicationFactor: 3 +reset: true + +topicConfig: | + min.insync.replicas=2 + +commonConfig: | + 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=1 + batch.size=131072 + +consumerConfig: | + group.id=benchGroup + auto.offset.reset=earliest + enable.auto.commit=false + 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/kafka_to_kafka_asp_perf.yaml b/driver-kop/kafka_to_kafka_asp_perf.yaml new file mode 100644 index 000000000..05c9a4712 --- /dev/null +++ b/driver-kop/kafka_to_kafka_asp_perf.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: 2 + 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-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-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 32ccb6ba2..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; @@ -51,6 +48,8 @@ import org.apache.kafka.common.serialization.ByteArraySerializer; 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; @@ -58,13 +57,17 @@ import org.apache.pulsar.client.api.PulsarClientException; import org.apache.pulsar.client.api.Schema; import org.apache.pulsar.client.api.SubscriptionType; +import org.apache.pulsar.common.policies.data.PersistencePolicies; import org.apache.pulsar.common.util.FutureUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class KopBenchmarkDriver implements BenchmarkDriver { private static final ObjectMapper mapper = new ObjectMapper(new YAMLFactory()) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + private static final Logger log = LoggerFactory.getLogger(KopBenchmarkDriver.class); private final List producers = new CopyOnWriteArrayList<>(); private final List consumers = new CopyOnWriteArrayList<>(); @@ -77,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); } @@ -99,6 +104,21 @@ public void initialize(File configurationFile, StatsLogger statsLogger) throws I ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, ByteArrayDeserializer.class); final PulsarConfig pulsarConfig = config.pulsarConfig; + + try (PulsarAdmin admin1 = getPulsarAdmin(pulsarConfig)) { + // 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) @@ -138,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); @@ -213,6 +234,35 @@ 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 { + PulsarAdminBuilder builder = PulsarAdmin.builder().serviceHttpUrl(config.httpServiceUrl); + if (config.authPluginClassName != null) { + builder.authentication(config.authPluginClassName, config.authParamsString); + } + return builder.build(); } private PulsarClient getPulsarClient(String serviceUrl) 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-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..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 @@ -17,6 +17,11 @@ public class PulsarConfig { public String serviceUrl; + public String httpServiceUrl; + + public String authPluginClassName; + public String authParamsString; + // producer configs public boolean batchingEnabled = true; public boolean blockIfQueueFull = true; @@ -28,4 +33,13 @@ 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..091dd6eab --- /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://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: 2 + 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 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 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..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); @@ -124,7 +123,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 @@ -187,10 +188,10 @@ public String getTopicNamePrefix() { public CompletableFuture createTopic(String topic, int partitions) { if (partitions == 1) { // No-op - return CompletableFuture.completedFuture(null); + 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 @@ -234,7 +235,8 @@ CompletableFuture> createInternalConsumer( .topic(topic) .subscriptionName(subscriptionName) .receiverQueueSize(config.consumer.receiverQueueSize) - .maxTotalReceiverQueueSizeAcrossPartitions(Integer.MAX_VALUE) + .maxTotalReceiverQueueSizeAcrossPartitions( + config.consumer.maxTotalReceiverQueueSizeAcrossPartitions) .poolMessages(true) .subscribeAsync(); } @@ -247,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-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/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; } 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/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/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 new file mode 100644 index 000000000..18caba3fc --- /dev/null +++ b/workloads/asp/100k/1-topic-1-partition/100k-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: 100k-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: 100000 +consumerBacklogSizeGB: 0 +testDurationMinutes: 10 + 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-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 new file mode 100644 index 000000000..c22207d83 --- /dev/null +++ b/workloads/asp/100k/1-topic-1-partition/100k-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: 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 new file mode 100644 index 000000000..b56597046 --- /dev/null +++ b/workloads/asp/100k/1-topic-1-partition/100k-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: 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 new file mode 100644 index 000000000..df0ea989f --- /dev/null +++ b/workloads/asp/100k/1-topic-16-partition/100k-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: 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-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 new file mode 100644 index 000000000..83ca0cd32 --- /dev/null +++ b/workloads/asp/100k/1-topic-16-partition/100k-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: 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 new file mode 100644 index 000000000..4b6549932 --- /dev/null +++ b/workloads/asp/100k/1-topic-16-partition/100k-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: 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 new file mode 100644 index 000000000..c0869f589 --- /dev/null +++ b/workloads/asp/100k/1-topic-512-partition/100k-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-16p-16c-100b + +topics: 1 +partitionsPerTopic: 512 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +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-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 new file mode 100644 index 000000000..dbc8a96a8 --- /dev/null +++ b/workloads/asp/100k/1-topic-512-partition/100k-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-16p-16c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +producerRate: 100000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..516c09f86 --- /dev/null +++ b/workloads/asp/100k/1-topic-512-partition/100k-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-16p-16c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +producerRate: 100000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..0cfc90f05 --- /dev/null +++ b/workloads/asp/100k/1-topic-64-partition/100k-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: 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/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 new file mode 100644 index 000000000..fe1c721a2 --- /dev/null +++ b/workloads/asp/100k/1-topic-64-partition/100k-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: 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 new file mode 100644 index 000000000..4a7e0d04a --- /dev/null +++ b/workloads/asp/100k/1-topic-64-partition/100k-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: 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 new file mode 100644 index 000000000..b4f55aee4 --- /dev/null +++ b/workloads/asp/10k/1-topic-1-partition/10k-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: 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-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 new file mode 100644 index 000000000..0f0777c96 --- /dev/null +++ b/workloads/asp/10k/1-topic-1-partition/10k-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: 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 new file mode 100644 index 000000000..aa87838cd --- /dev/null +++ b/workloads/asp/10k/1-topic-1-partition/10k-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: 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 new file mode 100644 index 000000000..9ec8a0280 --- /dev/null +++ b/workloads/asp/10k/1-topic-16-partition/10k-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: 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-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 new file mode 100644 index 000000000..e493f375e --- /dev/null +++ b/workloads/asp/10k/1-topic-16-partition/10k-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: 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 new file mode 100644 index 000000000..81c941b30 --- /dev/null +++ b/workloads/asp/10k/1-topic-16-partition/10k-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: 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 new file mode 100644 index 000000000..81e01201a --- /dev/null +++ b/workloads/asp/10k/1-topic-512-partition/10k-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-16p-16c-100b + +topics: 1 +partitionsPerTopic: 512 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +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-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 new file mode 100644 index 000000000..061f26454 --- /dev/null +++ b/workloads/asp/10k/1-topic-512-partition/10k-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-16p-16c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +producerRate: 10000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..821fe72e1 --- /dev/null +++ b/workloads/asp/10k/1-topic-512-partition/10k-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-16p-16c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +producerRate: 10000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..01f344063 --- /dev/null +++ b/workloads/asp/10k/1-topic-64-partition/10k-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: 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/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 new file mode 100644 index 000000000..46d308ebf --- /dev/null +++ b/workloads/asp/10k/1-topic-64-partition/10k-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: 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 new file mode 100644 index 000000000..b13fa6f7d --- /dev/null +++ b/workloads/asp/10k/1-topic-64-partition/10k-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: 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 new file mode 100644 index 000000000..c1f4a5458 --- /dev/null +++ b/workloads/asp/20k/1-topic-1-partition/20k-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: 20k-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: 20000 +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-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 new file mode 100644 index 000000000..3ca3eb90e --- /dev/null +++ b/workloads/asp/20k/1-topic-1-partition/20k-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: 20k-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: 20000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..955e0082a --- /dev/null +++ b/workloads/asp/20k/1-topic-1-partition/20k-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: 20k-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: 20000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..6f2b8c5d7 --- /dev/null +++ b/workloads/asp/20k/1-topic-16-partition/20k-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: 20k-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: 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-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 new file mode 100644 index 000000000..7986cf713 --- /dev/null +++ b/workloads/asp/20k/1-topic-16-partition/20k-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: 20k-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: 20000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..a71ed214d --- /dev/null +++ b/workloads/asp/20k/1-topic-16-partition/20k-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: 20k-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: 20000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..286135874 --- /dev/null +++ b/workloads/asp/20k/1-topic-512-partition/20k-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: 20k-1-topic-512-partition-16p-16c-100b + +topics: 1 +partitionsPerTopic: 512 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +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-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 new file mode 100644 index 000000000..63b17f747 --- /dev/null +++ b/workloads/asp/20k/1-topic-512-partition/20k-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: 20k-1-topic-512-partition-16p-16c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +producerRate: 20000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..7ab4a04e6 --- /dev/null +++ b/workloads/asp/20k/1-topic-512-partition/20k-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: 20k-1-topic-512-partition-16p-16c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +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/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 new file mode 100644 index 000000000..2c2460c8a --- /dev/null +++ b/workloads/asp/20k/1-topic-64-partition/20k-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: 20k-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: 20000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..33625a9aa --- /dev/null +++ b/workloads/asp/20k/1-topic-64-partition/20k-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: 20k-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: 20000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..307ef2fe8 --- /dev/null +++ b/workloads/asp/20k/1-topic-64-partition/20k-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: 20k-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: 20000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..d2c223475 --- /dev/null +++ b/workloads/asp/50k/1-topic-1-partition/50k-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: 50k-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: 50000 +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-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 new file mode 100644 index 000000000..82c1db95c --- /dev/null +++ b/workloads/asp/50k/1-topic-1-partition/50k-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: 50k-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: 50000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..dde610b2f --- /dev/null +++ b/workloads/asp/50k/1-topic-1-partition/50k-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: 50k-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: 50000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..004b7eb00 --- /dev/null +++ b/workloads/asp/50k/1-topic-16-partition/50k-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: 50k-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: 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-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 new file mode 100644 index 000000000..d72c74704 --- /dev/null +++ b/workloads/asp/50k/1-topic-16-partition/50k-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: 50k-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: 50000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..ef2982ebc --- /dev/null +++ b/workloads/asp/50k/1-topic-16-partition/50k-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: 50k-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: 50000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..af2d22da8 --- /dev/null +++ b/workloads/asp/50k/1-topic-512-partition/50k-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: 50k-1-topic-512-partition-16p-16c-100b + +topics: 1 +partitionsPerTopic: 512 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +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-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 new file mode 100644 index 000000000..e50e8bce2 --- /dev/null +++ b/workloads/asp/50k/1-topic-512-partition/50k-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: 50k-1-topic-512-partition-16p-16c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +producerRate: 50000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..ae65dd949 --- /dev/null +++ b/workloads/asp/50k/1-topic-512-partition/50k-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: 50k-1-topic-512-partition-16p-16c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +producerRate: 50000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..39bf6a831 --- /dev/null +++ b/workloads/asp/50k/1-topic-64-partition/50k-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: 50k-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: 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/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 new file mode 100644 index 000000000..4a44acbe7 --- /dev/null +++ b/workloads/asp/50k/1-topic-64-partition/50k-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: 50k-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: 50000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..9ff686163 --- /dev/null +++ b/workloads/asp/50k/1-topic-64-partition/50k-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: 50k-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: 50000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..7386ccdb4 --- /dev/null +++ b/workloads/asp/max/1-topic-1-partition/max-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: 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-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 new file mode 100644 index 000000000..fab949ef2 --- /dev/null +++ b/workloads/asp/max/1-topic-1-partition/max-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: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 1 +producersPerTopic: 1 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..259ab4eb5 --- /dev/null +++ b/workloads/asp/max/1-topic-1-partition/max-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: 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 new file mode 100644 index 000000000..264561ec3 --- /dev/null +++ b/workloads/asp/max/1-topic-16-partition/max-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: 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-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 new file mode 100644 index 000000000..7b684473b --- /dev/null +++ b/workloads/asp/max/1-topic-16-partition/max-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: 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 new file mode 100644 index 000000000..e10ee641a --- /dev/null +++ b/workloads/asp/max/1-topic-16-partition/max-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: 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 new file mode 100644 index 000000000..ffe1e2a41 --- /dev/null +++ b/workloads/asp/max/1-topic-512-partition/max-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-16p-16c-100b + +topics: 1 +partitionsPerTopic: 512 +messageSize: 100 +payloadFile: "payload/payload-100b.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +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-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 new file mode 100644 index 000000000..b155bef56 --- /dev/null +++ b/workloads/asp/max/1-topic-512-partition/max-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-16p-16c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 1024 +payloadFile: "payload/payload-1Kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..9fb15676b --- /dev/null +++ b/workloads/asp/max/1-topic-512-partition/max-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-16p-16c-1kb + +topics: 1 +partitionsPerTopic: 512 +messageSize: 65536 +payloadFile: "payload/payload-64kb.data" +subscriptionsPerTopic: 1 +consumerPerSubscription: 16 +producersPerTopic: 16 +producerRate: 10000000 +consumerBacklogSizeGB: 0 +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 new file mode 100644 index 000000000..2bb032f46 --- /dev/null +++ b/workloads/asp/max/1-topic-64-partition/max-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: 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 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 new file mode 100644 index 000000000..7bd55c945 --- /dev/null +++ b/workloads/asp/max/1-topic-64-partition/max-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: 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 new file mode 100644 index 000000000..e1d545c07 --- /dev/null +++ b/workloads/asp/max/1-topic-64-partition/max-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: 10