Updated on 2023-09-05 GMT+08:00

Test Procedure

Test the message production rate on the client side and the CPU usage on the server side in the following scenarios:

  • Test scenario 1 (batch size): same Kafka instance, same topics, different batch.size settings
  • Test scenario 2 (cross-AZ or intra-AZ production): same Kafka instance, same topics, different AZ settings for the client and server
  • Test scenario 3 (number of replicas): same Kafka instance, different numbers of replicas
  • Test scenario 4 (synchronous or asynchronous replication): same Kafka instance, topics with different replication settings
Table 1 Test parameters

Partitions

Replicas

Synchronous Replication Enabled

batch.size

Cross-AZ Production

3

1

No

1 KB

No

3

1

No

16 KB

No

3

1

No

1 KB

Yes

3

3

Yes

1 KB

No

3

3

No

1 KB

No

Test script:

./kafka-producer-perf-test.sh --producer-props bootstrap.servers=${connection address} acks=1 batch.size=${batch.size} linger.ms=0 --topic ${topic name} --num-records ${num-records} --record-size 1024 --throughput -102400
  • bootstrap.servers: address of the Kafka instance obtained in Step 1: Buy a Kafka Instance.
  • acks: message synchronization policy. acks=1 indicates asynchronous replication, and acks=-1 indicates synchronous replication.
  • batch.size: size of messages sent in each batch, in bytes.
  • linger.ms: interval between two batches.
  • topic: topic name set in Step 2: Create Topics.
  • num-records: total number of messages to be sent.
  • record-size: size of each message.
  • throughput: number of messages sent per second.

Test Scenario 1: Varied Batch Sizes

  1. Log in to the client server, go to the kafka_2.12-2.7.2/bin directory, and run the following scripts.

    Set batch.size to 1 KB, and run the following script:
    ./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=1 batch.size=1024 linger.ms=0 --topic Topic-01 --num-records 8000000 --record-size 1024 --throughput 102400

    The result is as follows:

    8000000 records sent, 37696.729809 records/sec (36.81 MB/sec), 796.54 ms avg latency, 3838.00 ms max latency, 322 ms 50th, 2282 ms 95th, 2745 ms 99th, 3593 ms 99.9th.

    Message production rate: 37,697 records/second

    Set batch.size to 16 KB, and run the following script:

    ./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=1 batch.size=16384 linger.ms=0 --topic Topic-01 --num-records 100000000 --record-size 1024 --throughput 102400

    The result is as follows:

    100000000 records sent, 102399.318430 records/sec (100.00 MB/sec), 4.62 ms avg latency, 751.00 ms max latency, 1 ms 50th, 3 ms 95th, 164 ms 99th, 406 ms 99.9th.

    Message production rate: 102,399 records/second

  2. Log in to the Kafka console, locate the row that contains the test instance, and click to go to the Cloud Eye console.
  3. On the Brokers tab page, view the CPU usage of the server nodes.

    Figure 1 broker-0 CPU usage (batch.size = 1 KB)

    CPU usage: 54%

    Figure 2 broker-0 CPU usage (batch.size = 16 KB)

    CPU usage: 26%

    Figure 3 broker-1 CPU usage (batch.size = 1 KB)

    CPU usage: 55%

    Figure 4 broker-1 CPU usage (batch.size = 16 KB)

    CPU usage: 25%

    Figure 5 broker-2 CPU usage (batch.size = 1 KB)

    CPU usage: 51.65%

    Figure 6 broker-2 CPU usage (batch.size = 16 KB)

    CPU usage: 36.45%

Test Scenario 2: Cross-AZ or Intra-AZ Production

  1. Log in to the client server, go to the kafka_2.12-2.7.2/bin directory, and run the following scripts.

    Configure the same AZ for the client and the instance, and run the following script:

    ./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=1 batch.size=1024 linger.ms=0 --topic Topic-01 --num-records 8000000 --record-size 1024 --throughput 102400

    The result is as follows:

    8000000 records sent, 37696.729809 records/sec (36.81 MB/sec), 796.54 ms avg latency, 3838.00 ms max latency, 322 ms 50th, 2282 ms 95th, 2745 ms 99th, 3593 ms 99.9th.

    Message production rate: 37,697 records/second

    Configure different AZs for the client and the instance, and run the following script:

    ./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=1 batch.size=1024 linger.ms=0 --topic Topic-01 --num-records 4000000 --record-size 1024 --throughput 102400

    The result is as follows:

    4000000 records sent, 15358.152107 records/sec (15.00 MB/sec), 1944.09 ms avg latency, 8179.00 ms max latency, 13 ms 50th, 6049 ms 95th, 6549 ms 99th, 8086 ms 99.9th.

    Message production rate: 15,358 records/second

  2. Log in to the Kafka console, locate the row that contains the test instance, and click to go to the Cloud Eye console.
  3. On the Brokers tab page, view the CPU usage of the server nodes.

    Figure 7 broker-0 CPU usage (same AZ)

    CPU usage: 54%

    Figure 8 broker-0 CPU usage (different AZs)

    CPU usage: 28%

    Figure 9 broker-1 CPU usage (same AZ)

    CPU usage: 55%

    Figure 10 broker-1 CPU usage (different AZs)

    CPU usage: 28%

    Figure 11 broker-2 CPU usage (same AZ)

    CPU usage: 51.65%

    Figure 12 broker-2 CPU usage (different AZs)

    CPU usage: 23.35%

Test Scenario 3: Varied Numbers of Replicas

  1. Log in to the client server, go to the kafka_2.12-2.7.2/bin directory, and run the following scripts.

    For the one-replica topic, run the following script:

    ./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=1 batch.size=1024 linger.ms=0 --topic Topic-01 --num-records 8000000 --record-size 1024 --throughput 102400

    The result is as follows:

    8000000 records sent, 37696.729809 records/sec (36.81 MB/sec), 796.54 ms avg latency, 3838.00 ms max latency, 322 ms 50th, 2282 ms 95th, 2745 ms 99th, 3593 ms 99.9th.

    Message production rate: 37,697 records/second

    For the three-replica topic, run the following script:

    ./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=1 batch.size=1024 linger.ms=0 --topic Topic-02 --num-records 4000000 --record-size 1024 --throughput 102400

    The result is as follows:

    4000000 records sent, 15245.877896 records/sec (14.89 MB/sec), 1963.88 ms avg latency, 7471.00 ms max latency, 306 ms 50th, 5854 ms 95th, 6682 ms 99th, 7439 ms 99.9th.

    Message production rate: 15,246 records/second

  2. Log in to the Kafka console, locate the row that contains the test instance, and click to go to the Cloud Eye console.
  3. On the Brokers tab page, view the CPU usage of the server nodes.

    Figure 13 broker-0 CPU usage (one replica)

    CPU usage: 54%

    Figure 14 broker-0 CPU usage (three replicas)

    CPU usage: 86%

    Figure 15 broker-1 CPU usage (one replica)

    CPU usage: 55%

    Figure 16 broker-1 CPU usage (three replicas)

    CPU usage: 87%

    Figure 17 broker-2 CPU usage (one replica)

    CPU usage: 51.65%

    Figure 18 broker-2 CPU usage (three replicas)

    CPU usage: 87.10%

Test Scenario 4: Synchronous/Asynchronous Replication

  1. Log in to the client server, go to the kafka_2.12-2.7.2/bin directory, and run the following scripts.

    For asynchronous replication, run the following script:

    ./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=1 batch.size=1024 linger.ms=0 --topic Topic-02 --num-records 4000000 --record-size 1024 --throughput 102400

    The result is as follows:

    4000000 records sent, 15245.877896 records/sec (14.89 MB/sec), 1963.88 ms avg latency, 7471.00 ms max latency, 306 ms 50th, 5854 ms 95th, 6682 ms 99th, 7439 ms 99.9th.

    Message production rate: 15,246 records/second

    For synchronous replication, run the following script:

    ./kafka-producer-perf-test.sh --producer-props bootstrap.servers=192.168.0.69:9092,192.168.0.42:9092,192.168.0.66:9092 acks=-1 batch.size=1024 linger.ms=0 --topic Topic-03 --num-records 1000000 --record-size 1024 --throughput 102400

    The result is as follows:

    1000000 records sent, 5180.783438 records/sec (5.06 MB/sec), 5692.27 ms avg latency, 10312.00 ms max latency, 5579 ms 50th, 7538 ms 95th, 9481 ms 99th, 10219 ms 99.9th.

    Message production rate: 5181 records/second

  2. Log in to the Kafka console, locate the row that contains the test instance, and click to go to the Cloud Eye console.
  3. On the Brokers tab page, view the CPU usage of the server nodes.

    Figure 19 broker-0 CPU usage (asynchronous replication)

    CPU usage: 86%

    Figure 20 broker-0 CPU usage (synchronous replication)

    CPU usage: 62%

    Figure 21 broker-1 CPU usage (asynchronous replication)

    CPU usage: 87%

    Figure 22 broker-1 CPU usage (synchronous replication)

    CPU usage: 61%

    Figure 23 broker-2 CPU usage (asynchronous replication)

    CPU usage: 87.10%

    Figure 24 broker-2 CPU usage (synchronous replication)

    CPU usage: 59.40%