Test architecture

In order to conduct client tests this will be conducted in following architecture:

Link between HV-VES Client and HV-VES is TLS secured (provided scripts generate and place certificates on proper containers).

Note: In the Without DMaaP Kafka tests the DMaaP/Kafka service was substituted with wurstmeister kafka

Environment and Resources

Kubernetes cluster with 4 worker nodes, sharing hardware configuration shown in a table below, is deployed in OpenStack cloud operating system. The test components in docker containers are further deployed on the Kubernetes cluster.

Configuration


CPU

ModelIntel(R) Xeon(R) CPU E5-2680 v4
No. of cores24
CPU clock speed [GHz]2.40
Total RAM [GB]62.9

Network Performance

Pod measurement method

In order to check cluster network performance tests with usage of Iperf3 have been applied. Iperf is a tool for measurement of the maximum bandwidth on IP networks, it runs on two mode: server and client. We used a docker image: networkstatic/iperf3.

Following deployment creates a pod with iperf (server mode) on one worker, and one pod with iperf client for each worker.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: iperf3-server
  namespace: onap
  labels:
    app: iperf3-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: iperf3-server
  template:
    metadata:
      labels:
        app: iperf3-server
    spec:
      containers:
        - name: iperf3-server
          image: networkstatic/iperf3
          args: ['-s']
          ports:
            - containerPort: 5201
              name: server


---

apiVersion: v1
kind: Service
metadata:
  name: iperf3-server
  namespace: onap
spec:
  selector:
    app: iperf3-server
  ports:
    - protocol: TCP
      port: 5201
      targetPort: server



---

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: iperf3-clients
  namespace: onap
  labels:
    app: iperf3-client
spec:
  selector:
    matchLabels:
      app: iperf3-client
  template:
    metadata:
      labels:
        app: iperf3-client
    spec:
      containers:
        - name: iperf3-client
          image: networkstatic/iperf3
          command: ['/bin/sh', '-c', 'sleep infinity']

To create deployment, execute following command:

kubectl create -f deployment.yaml

To find all iperf pods, execute:

kubectl -n onap get pods -o wide | grep iperf

To measure connection between pods, run iperf on iperf-client pod, using following command:

kubectl -n onap exec -it <iperf-client-pod> -- iperf3 -c iperf3-server

To change output format from MBits/sec to MBytes/sec:

kubectl -n onap exec -it <iperf-client-pod> -- iperf3 -c iperf3-server -f MBytes

To change measure time:

kubectl -n onap exec -it <iperf-client-pod> -- iperf3 -c iperf3-server -t <time-in-second>

To gather results, the command was executed:

kubectl -n onap exec -it <iperf-client-pod> -- iperf3 -c iperf3-server -f MBytes

Results of performed tests

Average speed (without worker 0 )  : 119 MBytes/sec

Test Setup

Preconditions

In order to reach metrics endpoint in HV-VES there is a need to add the following lines in the ports section of HV-VES service configuration file:

  - name: port-t-6060
	port: 6060
	protocol: TCP
	targetPort: 6060

Before start tests, download docker image of producer which is available here:

To extract image locally use command: 

docker load < hv-collector-go-client.tar.gz  

Modify tools/performance/cloud/producer-pod.yaml file to use the above image and set imagePullPolicy to IfNotPresent:

...
spec:
  containers:
    - name: hv-collector-producer
      image: onap/org.onap.dcaegen2.collectors.hv-ves.hv-collector-go-client:latest
      imagePullPolicy: IfNotPresent
      volumeMounts:
...


To execute performance tests we have to run functions from a shell script cloud-based-performance-test.sh in HV-VES project directory: ~/tools/performance/cloud/

  1. First we have to generate certificates in ~/tools/ssl folder by using gen_certs. This step only needs to be performed during the first test setup (or if the generated files have been deleted).

    ./cloud-based-performance-test.sh gen_certs


  2. Then we call setup in order to send certificates to HV-VES, and deploy Consumers, Prometheus, Grafana and create their ConfigMaps.

    ./cloud-based-performance-test.sh setup


  3. After completing previous steps we can call the start function, which provides Producers and starts the test.

    ./cloud-based-performance-test.sh start

    For the start function we can use optional arguments:

    --loadshould the test keep defined number of running producers until script interruption (false)
    --containersnumber of producer containers to create (1)
    --properties-filepath to file with benchmark properties (./test.properties)
    --retention-time-minutesretention time of messages in kafka in minutes (60)

    Example invocations of test start:

    ./cloud-based-performance-test.sh start --containers 10

    The command above starts the test that creates 10 producers which send the amount of messages defined in test.properties once.

    ./cloud-based-performance-test.sh start --load true --containers 10 --retention-time-minutes 30

    This invocation starts load test, meaning the script will try to keep the amount of running containers at 10 with kafka message retention of 30 minutes.


    The test.properties file contains Producers and Consumers configurations and it allows setting following properties:

    Producer
    hvVesAddressHV-VES address (dcae-hv-ves-collector.onap:6061)
    client.countNumber of clients per pod (1)
    message.sizeSize of a single message in bytes (16384)
    message.countAmount of messages to be send by each client (1000)
    message.intervalInterval between messages in miliseconds (1)
    Certificates paths
    client.cert.pathPath to cert file (/ssl/client.p12)
    client.cert.pass.pathPath to cert's pass file (/ssl/client.pass)
    Consumer
    kafka.bootstrapServersAdress of Kafka service to consume from (message-router-kafka:9092)
    kafka.topicsKafka topics to subscribe to (HV_VES_PERF3GPP)


    Results can be accessed under following links:

HV-VES Performance test results

With dmaap Kafka

Conditions

Tests were performed with 5 repetitions for each configuration shown in the table below.

Number of producersMessages per producer

Payload size [B]

Interval [ms]
290000819210
490000819210
660000819210

Raw results data

Raw results data with screenshots can be found in following files:

Test Results - series 1

Below tables show the test results across a wide range of containers' number. 

NUMBER OF PRODUCERSTOTAL MESSAGES PROCESSEDDIFFERENCE BETWEEN ALL MESSAGES AND SENT TO HV-VESAVERAGE PROCESSING TIME IN HV-VES WITHOUT ROUTING [ms]AVERAGE LATENCY TO HV-VES OUTPUT WITH ROUTING [ms]PEAK INCOMING DATA RATE [MB/s]PEAK PROCESSING MESSAGE QUEUE SIZEPEAK CPU LOAD [%]PEAK MEMORY USAGE [GB]RESULTS PRESENTED IN GRAFANA
218000000.03541.61752.90.38

218000000.0218.51.663.20.37

218000000.02214.81.6662.40.38

218000000.02319.41.6592.20.38

218000000.0217.61.6582.60.36


NUMBER OF PRODUCERSTOTAL MESSAGES PROCESSEDDIFFERENCE BETWEEN ALL MESSAGES AND SENT TO HV-VESAVERAGE PROCESSING TIME IN HV-VES WITHOUT ROUTING [ms]AVERAGE LATENCY TO HV-VES OUTPUT WITH ROUTING [ms]PEAK INCOMING DATA RATE [MB/s]PEAK PROCESSING MESSAGE QUEUE SIZEPEAK CPU LOAD [%]PEAK MEMORY USAGE [GB]RESULTS PRESENTED IN GRAFANA
431586844824822603,2240030,4

43591938073660104083,231004,90,78

4359401591135034863.730004,90,56

436000001.51303.312004.10.39

436000000.02573.31803.50.38


NUMBER OF PRODUCERSTOTAL MESSAGES PROCESSEDDIFFERENCE BETWEEN ALL MESSAGES AND SENT TO HV-VESAVERAGE PROCESSING TIME IN HV-VES WITHOUT ROUTING [ms]AVERAGE LATENCY TO HV-VES OUTPUT WITH ROUTING [ms]PEAK INCOMING DATA RATE [MB/s]PEAK PROCESSING MESSAGE QUEUE SIZEPEAK CPU LOAD [%]PEAK MEMORY USAGE [GB]RESULTS PRESENTED IN GRAFANA
635847515256600178754.949005.80.97

635849415067080201824.745004.50.97

63592447564900172314.919003.90.93

635894410566150172004.9480050.97

635868913115410172024.9410050.96


Test Results - series 2


NUMBER OF PRODUCERSTOTAL MESSAGES PROCESSEDDIFFERENCE BETWEEN ALL MESSAGES AND SENT TO HV-VESAVERAGE PROCESSING TIME IN HV-VES WITHOUT ROUTING [ms]AVERAGE LATENCY TO HV-VES OUTPUT WITH ROUTING [ms]PEAK INCOMING DATA RATE [MB/s]PEAK PROCESSING MESSAGE QUEUE SIZEPEAK CPU LOAD [%]PEAK MEMORY USAGE [GB]RESULTS PRESENTED IN GRAFANA
218000000.0268.91.61130.35

218000000.02611.31.6233.20.35


NUMBER OF PRODUCERSTOTAL MESSAGES PROCESSEDDIFFERENCE BETWEEN ALL MESSAGES AND SENT TO HV-VESAVERAGE PROCESSING TIME IN HV-VES WITHOUT ROUTING [s]AVERAGE LATENCY TO HV-VES OUTPUT WITH ROUTING [ms]PEAK INCOMING DATA RATE [MB/s]PEAK PROCESSING MESSAGE QUEUE SIZEPEAK CPU LOAD [%]PEAK MEMORY USAGE [GB]RESULTS PRESENTED IN GRAFANA
436000000.02241.33.213040.35

436000000.02340.73.23704.20.35


NUMBER OF PRODUCERSTOTAL MESSAGES PROCESSEDDIFFERENCE BETWEEN ALL MESSAGES AND SENT TO HV-VESAVERAGE PROCESSING TIME IN HV-VES WITHOUT ROUTING [ms]AVERAGE LATENCY TO HV-VES OUTPUT WITH ROUTING [ms]PEAK INCOMING DATA RATE [MB/s]PEAK PROCESSING MESSAGE QUEUE SIZEPEAK CPU LOAD [%]PEAK MEMORY USAGE [GB]RESULTS PRESENTED IN GRAFANA
63593176836240159654.845004.31

63592177836490168344.842005.81



No DMaaP Kafka SetUp

Install Kafka Docker on Kubernetes

(based on: ultimate-guide-to-installing-kafka-docker-on-kuber)

Create config maps

Config maps are required by zookeeper and kafka-broker deployments.

kubectl -n onap create cm kafka-config-map --from-file=kafka_server_jaas.conf


KafkaServer {
   org.apache.kafka.common.security.plain.PlainLoginModule required
   username="admin"
   password="admin_secret"
   user_admin="admin_secret";
};
Client {
   org.apache.zookeeper.server.auth.DigestLoginModule required
   username="kafka"
   password="kafka_secret";
};




kubectl -n onap create cm zk-config-map --from-file=zk_server_jaas.conf


Server {
       org.apache.zookeeper.server.auth.DigestLoginModule required
       user_kafka="kafka_secret";
};

Create deployments


kubectl -n onap create -f zookeeper.yml


---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: zookeeper-deployment-1
spec:
  template:
    metadata:
      labels:
        app: zookeeper-1
    spec:
      containers:
      - name: zoo1
        image: digitalwonderland/zookeeper
        volumeMounts:
        - name: config-volume
          mountPath: "/home/ubuntu/kafkadepl/myconfig/zk_server_jaas.conf"
          subPath: zk_server_jaas.conf
        ports:
        - containerPort: 2181
        env:
        - name: ZOOKEEPER_ID
          value: "1"
        - name: ZOOKEEPER_SERVER_1
          value: zoo1
        - name: KAFKA_OPTS
          value: "-Djava.security.auth.login.config=/home/ubuntu/kafkadepl/myconfig/zk_server_jaas.conf -Dzookeeper.kerberos.removeHostFromPrincipal=true -Dzookeeper.kerberos.removeRealmFromPrincipal=true -Dzookeeper.authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider -Dzookeeper.requireClientAuthScheme=sasl"
        - name: SERVER_JVMFLAGS
          value: "-Djava.security.auth.login.config=/home/ubuntu/kafkadepl/myconfig/zk_server_jaas.conf -Dzookeeper.skipACL=yes"
        - name: ZOOKEEPER_AUTHPROVIDER_1
          value: "org.apache.zookeeper.server.auth.SASLAuthenticationProvider"
        - name: ZOOKEEPER_REQUIRECLIENTAUTHSCHEME
          value: "SASL"
      volumes:
      - name: config-volume
        configMap:
          name: zk-config-map
---
apiVersion: v1
kind: Service
metadata:
  name: zoo1
  labels:
    app: zookeeper-1
spec:
  ports:
  - name: client
    port: 2181
    protocol: TCP
  - name: follower
    port: 2888
    protocol: TCP
  - name: leader
    port: 3888
    protocol: TCP
  selector:
    app: zookeeper-1





kubectl -n onap create -f kafka-service.yml


---
apiVersion: v1
kind: Service
metadata:
  name: kafka-service
  labels:
    name: kafka
spec:
  ports:
  - port: 9092
    name: kafka-port
    protocol: TCP
  selector:
    app: kafka
    id: "0"
  type: LoadBalancer




kubectl -n onap create -f kafka-broker.yml


---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: kafka-broker0
spec:
  template:
    metadata:
      labels:
        app: kafka
        id: "0"
    spec:
      containers:
      - name: kafka
        image: wurstmeister/kafka
        volumeMounts:
        - name: config-volume
          mountPath: "/home/ubuntu/kafkadepl/myconfig/kafka_server_jaas.conf"
          subPath: kafka_server_jaas.conf
        ports:
        - containerPort: 9092
        env:
        - name: KAFKA_ADVERTISED_PORT
          value: "30718"
        - name: KAFKA_ADVERTISED_HOST_NAME
          value: 10.43.155.122
        - name: KAFKA_ZOOKEEPER_CONNECT
          value: "zoo1:2181"
        - name: KAFKA_BROKER_ID
          value: "0"
        - name: KAFKA_DEFULT_REPLICATION_FACTOR
          value: "3"
        - name: KAFKA_AUTO_CREATE_TOPICS_ENABLE
          value: "true"
        - name: KAFKA_DELETE_TOPIC_ENABLE
          value: "true"
        - name: KAFKA_LISTENERS
          value: "INTERNAL_SASL_PLAINTEXT://0.0.0.0:9092"
        - name: KAFKA_ADVERTISED_LISTENERS
          value: "INTERNAL_SASL_PLAINTEXT://kafka-service:9092"
        - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
          value: "INTERNAL_SASL_PLAINTEXT:SASL_PLAINTEXT,EXTERNAL_SASL_PLAINTEXT:SASL_PLAINTEXT"
        - name: KAFKA_INTER_BROKER_LISTENER_NAME
          value: "INTERNAL_SASL_PLAINTEXT"
        - name: KAFKA_SASL_ENABLED_MECHANISMS
          value: "PLAIN"
        - name: KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL
          value: "PLAIN"
        - name: KAFKA_AUTHORIZER_CLASS_NAME
          value: "kafka.security.authorizer.AclAuthorizer"
        - name: KAFKA_ZOOKEEPER_SET_ACL
          value: "true"
        - name: KAFKA_OPTS
          value: "-Djava.security.auth.login.config=/home/ubuntu/kafkadepl/myconfig/kafka_server_jaas.conf"
        - name: KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND
          value: "true"
      volumes:
      - name: config-volume
        configMap:
          name: kafka-config-map


Verify that pods are up and running

kubectl -n onap get pods | grep 'zookeeper-deployment-1\|broker0'


kubectl -n onap get svc | grep kafka-service

If you need to change some variable or anything in a yml file, delete the current deployment, for example:

kubectl -n onap delete deploy kafka-broker0

And after modifying the file create a new deployment as described above.

Run the test

Modify tools/performance/cloud scripts to match the names in your deployments, described in the previous step. Here is a diff file (you may need to adapt it to the current code situation):

tools.diff 

Go to tools/performance/cloud and reboot the environment:

./reboot-test-environment.sh -v

Now you are ready to run the test.

Without DMaaP Kafka

Conditions

Tests were performed with following configuration:

Messages per producerPayload size [B]Interval [ms]
90000819210

Raw results data

Raw results data with screenshots can be found in following files:

To see custom Kafka metrics you may want to change kafka-and-producers.json (located in HV-VES project directory: tools/performance/cloud/grafana/dashboards) to

{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": 3,
"links": [],
"panels": [
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fill": 0,
"fillGradient": 0,
"gridPos": {
"h": 11,
"w": 8,
"x": 0,
"y": 0
},
"hiddenSeries": false,
"id": 12,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "sum(irate(container_network_transmit_bytes_total{pod=~\".*producer.*\"}[1m]))",
"interval": "",
"legendFormat": "Total Transmit Producers",
"refId": "A"
},
{
"expr": "sum(irate(container_network_transmit_bytes_total{pod=~\".*kafka-broker.*\"}[1m]))",
"interval": "",
"legendFormat": "Total Transmit Kafka",
"refId": "B"
},
{
"expr": "irate(container_network_transmit_bytes_total{pod=~\".*producer.*\"}[1m])",
"interval": "",
"legendFormat": "{{pod}}",
"refId": "C"
},
{
"expr": "irate(container_network_transmit_bytes_total{pod=~\".*kafka-broker.*\"}[1m])",
"interval": "",
"legendFormat": "{{pod}}",
"refId": "D"
}
],
"thresholds": [],
"timeFrom": "20m",
"timeRegions": [],
"timeShift": null,
"title": "Network Usage",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "Bps",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fill": 0,
"fillGradient": 0,
"gridPos": {
"h": 11,
"w": 8,
"x": 8,
"y": 0
},
"hiddenSeries": false,
"id": 22,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "sum(rate(container_network_transmit_bytes_total{pod=~\".*kafka-broker.*|.*hv-ves-coll.*|.*producer.*\"}[1m]))",
"hide": false,
"interval": "",
"legendFormat": "Total transmit",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": "20m",
"timeRegions": [],
"timeShift": null,
"title": "Total network usage (producers + hv-ves + kafka)",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "Bps",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fill": 0,
"fillGradient": 0,
"gridPos": {
"h": 11,
"w": 8,
"x": 16,
"y": 0
},
"hiddenSeries": false,
"id": 2,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "irate(container_network_receive_bytes_total{pod=~\"dep-dcae-hv-ves-collector.*\"}[1m])",
"hide": false,
"interval": "",
"legendFormat": "receive",
"refId": "A"
},
{
"expr": "irate(container_network_transmit_bytes_total{pod=~\"dep-dcae-hv-ves-collector.*\"}[1m])",
"interval": "",
"legendFormat": "transmit",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": "20m",
"timeRegions": [],
"timeShift": null,
"title": "HV-VES Network Usage",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"decimals": null,
"format": "Bps",
"label": "",
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fill": 0,
"fillGradient": 0,
"gridPos": {
"h": 12,
"w": 8,
"x": 0,
"y": 11
},
"hiddenSeries": false,
"id": 14,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "sum (rate (container_cpu_usage_seconds_total{pod=~\".*producer.*\"}[1m])) by (pod)",
"interval": "",
"legendFormat": "{{pod}}",
"refId": "A"
},
{
"expr": "sum (rate (container_cpu_usage_seconds_total{pod=~\".*kafka-broker.*\"}[1m])) by (pod)",
"interval": "",
"legendFormat": "{{pod}}",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": "20m",
"timeRegions": [],
"timeShift": null,
"title": "CPU usage [cores]",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "none",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fill": 0,
"fillGradient": 0,
"gridPos": {
"h": 12,
"w": 8,
"x": 8,
"y": 11
},
"hiddenSeries": false,
"id": 18,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "sum(container_memory_working_set_bytes{image!=\"\", pod=~\".*kafka-broker.*\"}) by (pod)",
"interval": "",
"legendFormat": "{{pod}}",
"refId": "A"
},
{
"expr": "sum(container_memory_working_set_bytes{image!=\"\", pod=~\".*producer.*\"}) by (pod)",
"hide": false,
"interval": "",
"legendFormat": "{{pod}}",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": "20m",
"timeRegions": [],
"timeShift": null,
"title": "Memory Usage",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "decbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"datasource": null,
"gridPos": {
"h": 6,
"w": 4,
"x": 16,
"y": 11
},
"id": 15,
"options": {
"colorMode": "value",
"fieldOptions": {
"calcs": [
"lastNotNull"
],
"defaults": {
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": [],
"values": false
},
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto"
},
"pluginVersion": "6.7.3",
"targets": [
{
"expr": "sum(container_network_transmit_packets_dropped_total{pod=~\".*producer.*\"})",
"interval": "",
"legendFormat": "Packets dropped",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Packets Dropped (producers)",
"type": "stat"
},
{
"datasource": null,
"gridPos": {
"h": 6,
"w": 4,
"x": 20,
"y": 11
},
"id": 4,
"options": {
"colorMode": "value",
"fieldOptions": {
"calcs": [
"lastNotNull"
],
"defaults": {
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": [],
"values": false
},
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto"
},
"pluginVersion": "6.7.3",
"targets": [
{
"expr": "sum(container_network_transmit_packets_dropped_total{pod=~\".*hv-ves-collector.*\"})",
"interval": "",
"legendFormat": "Packets dropped",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Packets Dropped (hv-ves)",
"type": "stat"
},
{
"datasource": null,
"gridPos": {
"h": 6,
"w": 4,
"x": 16,
"y": 17
},
"id": 17,
"options": {
"colorMode": "value",
"fieldOptions": {
"calcs": [
"max"
],
"defaults": {
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "bytes"
},
"overrides": [],
"values": false
},
"graphMode": "none",
"justifyMode": "auto",
"orientation": "auto"
},
"pluginVersion": "6.7.3",
"targets": [
{
"expr": "sum(container_network_transmit_bytes_total{pod=~\".*producer.*\"})",
"interval": "",
"legendFormat": "",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Sent (producers)",
"type": "stat"
},
{
"cacheTimeout": null,
"datasource": null,
"gridPos": {
"h": 6,
"w": 4,
"x": 20,
"y": 17
},
"id": 16,
"links": [],
"options": {
"colorMode": "value",
"fieldOptions": {
"calcs": [
"max"
],
"defaults": {
"mappings": [
{
"id": 0,
"op": "=",
"text": "N/A",
"type": 1,
"value": "null"
}
],
"nullValueMode": "connected",
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
},
"unit": "bytes"
},
"overrides": [],
"values": false
},
"graphMode": "none",
"justifyMode": "auto",
"orientation": "horizontal"
},
"pluginVersion": "6.7.3",
"targets": [
{
"expr": "container_network_receive_bytes_total{pod=~\".*hv-ves-collector.*\"}",
"interval": "",
"legendFormat": "Packets dropped",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "Received (hv-ves)",
"type": "stat"
}
],
"refresh": "5s",
"schemaVersion": 22,
"style": "dark",
"tags": [],
"templating": {
"list": []
},
"time": {
"from": "now-1h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
]
},
"timezone": "",
"title": "Kafka and Producers Statistics",
"uid": "-28uHcjZk",
"variables": {
"list": []
},
"version": 1
}


Test results - series 1

Below tables show the test results across a wide range of containers' number. 

NUMBER OF PRODUCERSTOTAL MESSAGES PROCESSEDDIFFERENCE BETWEEN ALL MESSAGES AND SENT TO HV-VESAVERAGE PROCESSING TIME IN HV-VES WITHOUT ROUTING [ms]AVERAGE LATENCY TO HV-VES OUTPUT WITH ROUTING [ms]PEAK INCOMING DATA RATE [MB/s]PEAK PROCESSING MESSAGE QUEUE SIZEPEAK CPU LOAD [%]PEAK MEMORY USAGE [GB]RESULTS PRESENTED IN GRAFANA
218000000.0241.51.633.50.37

436000000.0201.73.235.70.37

654000000.022.64.8246.00.37

872000000.022.86.4148.50.37

1090000000.027.38.15528.50.38

121080000000.02789.710777.50.41

1412600000061401900013.0106309.80.99


Test results - series 2

Below tables show the test results across a wide range of containers' number. 

NUMBER OF PRODUCERSTOTAL MESSAGES PROCESSEDDIFFERENCE BETWEEN ALL MESSAGES AND SENT TO HV-VESAVERAGE PROCESSING TIME IN HV-VES WITHOUT ROUTING [ms]AVERAGE LATENCY TO HV-VES OUTPUT WITH ROUTING [ms]PEAK INCOMING DATA RATE [MB/s]PEAK PROCESSING MESSAGE QUEUE SIZEPEAK CPU LOAD [%]PEAK MEMORY USAGE [GB]RESULTS PRESENTED IN GRAFANA
218000000.0251.71.633.40.37

436000000.0212.13.2144.90.37

654000000.022.54.8606.20.38

872000000.022.96.4247.40.37

1090000000.0185.58.02018.10.36


121080000000.019141.79.717169.10.44

1412600000031756816.057788.60.50