theodolite
Theodolite is a framework for benchmarking the horizontal and vertical scalability of cloud-native applications.
Science Score: 75.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 6 DOI reference(s) in README -
✓Academic publication links
Links to: arxiv.org -
○Academic email domains
-
✓Institutional organization owner
Organization cau-se has institutional domain (www.se.informatik.uni-kiel.de) -
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (11.4%) to scientific vocabulary
Keywords
Repository
Theodolite is a framework for benchmarking the horizontal and vertical scalability of cloud-native applications.
Basic Info
- Host: GitHub
- Owner: cau-se
- License: apache-2.0
- Language: Java
- Default Branch: main
- Homepage: https://www.theodolite.rocks
- Size: 5.48 MB
Statistics
- Stars: 52
- Watchers: 6
- Forks: 8
- Open Issues: 1
- Releases: 22
Topics
Metadata Files
README.md
Theodolite
A theodolite is a precision optical instrument for measuring angles between designated visible points in the horizontal and vertical planes. -- Wikipedia
Theodolite is a framework for benchmarking the horizontal and vertical scalability of cloud-native applications in Kubernetes.
Quickstart
Theodolite runs scalability benchmarks in Kubernetes. Follow our quickstart guide to get started.
Documentation
Documentation on Theodolite itself as well as regarding its benchmarking method can be found on the Theodolite website.
Project Structure
- Core of Theodolite is its Kubernetes Operator, implemented in Kotlin. The source-code can be found in
theodolite. - Theodolite's Helm chart and templates are maintained in
helm. - We provide Juptyer notebooks for analyzing and visualizing the results of benchmark executions in
analysis. - Theodolite comes with 4 application benchmarks, which are based on typical use cases for stream processing within microservices. Implementations of these benchmarks with several state-of-the art stream processing frameworks as well as corresponding load generators can be found in
theodolite-benchmarks. This includes both the source code of the implementations as well as benchmark definitions for Theodolite intheodolite-benchmarks/definitions. - The source code of Theodolite's SLO checkers are located in
slo-checker. - The documentation, which is hosted on theodolite.rocks, is located in
docs.
Contributing
We are happy to accept any kind of contributions to Theodolite. This includes reporting any issues you find using Theodolite, bug fixes and improvements as well as integrating your research within the project.
See our website to start contributing.
How to Cite
If you use Theodolite, please cite
Sören Henning and Wilhelm Hasselbring. “A Configurable Method for Benchmarking Scalability of Cloud-Native Applications”. In: Empirical Software Engineering 27. 2022. DOI: 10.1007/s10664-022-10162-1.
When referring to our stream processing benchmarks, please cite
Sören Henning and Wilhelm Hasselbring. “Theodolite: Scalability Benchmarking of Distributed Stream Processing Engines in Microservice Architectures”. In: Big Data Research 25. 2021. DOI: 10.1016/j.bdr.2021.100209. arXiv:2009.00304.
See our website for a list of publications directly related to Theodolite.
Owner
- Name: Kiel University - Software Engineering Group
- Login: cau-se
- Kind: organization
- Location: Kiel, Germany
- Website: https://www.se.informatik.uni-kiel.de/en/research/projects
- Repositories: 9
- Profile: https://github.com/cau-se
Citation (CITATION.cff)
cff-version: "1.1.0"
message: "If you use Theodolite, please cite it using these metadata."
authors:
- family-names: Henning
given-names: "Sören"
orcid: "https://orcid.org/0000-0001-6912-2549"
- family-names: Hasselbring
given-names: Wilhelm
orcid: "https://orcid.org/0000-0001-6625-4335"
title: Theodolite
version: "0.10.0"
repository-code: "https://github.com/cau-se/theodolite"
license: "Apache-2.0"
doi: "10.1007/s10664-022-10162-1"
preferred-citation:
type: article
authors:
- family-names: Henning
given-names: "Sören"
orcid: "https://orcid.org/0000-0001-6912-2549"
- family-names: Hasselbring
given-names: Wilhelm
orcid: "https://orcid.org/0000-0001-6625-4335"
doi: "10.1007/s10664-022-10162-1"
journal: "Empirical Software Engineering"
month: 8
title: "A Configurable Method for Benchmarking Scalability of Cloud-Native Applications"
volume: 27
year: 2022
CodeMeta (codemeta.json)
{
"@context": "https://doi.org/10.5063/schema/codemeta-2.0",
"@type": "SoftwareSourceCode",
"license": "https://spdx.org/licenses/Apache-2.0",
"codeRepository": "https://github.com/cau-se/theodolite",
"dateCreated": "2020-03-13",
"datePublished": "2020-07-27",
"dateModified": "2025-08-22",
"downloadUrl": "https://github.com/cau-se/theodolite/releases",
"name": "Theodolite",
"version": "0.10.0",
"description": "Theodolite is a framework for benchmarking the horizontal and vertical scalability of cloud-native applications.",
"developmentStatus": "active",
"relatedLink": [
"https://www.theodolite.rocks"
],
"referencePublication": "https://doi.org/10.1007/s10664-022-10162-1",
"programmingLanguage": [
"Kotlin",
"Java",
"Python"
],
"runtimePlatform": [
"Kubernetes"
],
"author": [
{
"@type": "Person",
"givenName": "Sren",
"familyName": "Henning",
"email": "soeren.henning@jku.at",
"affiliation": {
"@type": "Organization",
"name": "JKU/Dynatrace Co-Innovation Lab, LIT CPS Lab, Johannes Kepler University Linz"
}
}
]
}
GitHub Events
Total
- Watch event: 7
- Delete event: 4
- Issue comment event: 1
- Push event: 26
- Pull request event: 6
- Fork event: 1
- Create event: 4
Last Year
- Watch event: 7
- Delete event: 4
- Issue comment event: 1
- Push event: 26
- Pull request event: 6
- Fork event: 1
- Create event: 4
Dependencies
- com.google.code.gson:gson 2.8.9 implementation
- io.github.microutils:kotlin-logging 2.1.16 implementation
- io.quarkus:quarkus-arc * implementation
- io.quarkus:quarkus-kotlin * implementation
- io.quarkus:quarkus-kubernetes-client * implementation
- io.quarkus:quarkus-resteasy * implementation
- khttp:khttp 1.0.0 implementation
- org.apache.kafka:kafka-clients 2.8.0 implementation
- org.bouncycastle:bcpkix-jdk15on 1.69 implementation
- org.bouncycastle:bcprov-ext-jdk15on 1.69 implementation
- org.jetbrains.kotlin:kotlin-stdlib-jdk8 * implementation
- org.slf4j:slf4j-simple 1.7.32 implementation
- com.github.tomakehurst:wiremock-jre8 2.33.2 testImplementation
- io.quarkus:quarkus-junit5 * testImplementation
- io.quarkus:quarkus-test-kubernetes-client * testImplementation
- io.rest-assured:rest-assured * testImplementation
- org.junit-pioneer:junit-pioneer 1.5.0 testImplementation
- org.mockito.kotlin:mockito-kotlin 4.0.0 testImplementation
- io.confluent:kafka-streams-avro-serde 5.3.2 implementation
- org.apache.beam:beam-sdks-java-io-kafka 2.35.0 implementation
- org.slf4j:slf4j-api 1.7.32 runtimeOnly
- org.slf4j:slf4j-jdk14 1.7.32 runtimeOnly
- junit:junit 4.12 testImplementation
- com.github.spotbugs.snom:spotbugs-gradle-plugin 5.0.4 implementation
- gradle.plugin.com.github.johnrengelman:shadow 7.1.2 implementation
- org.apache.avro:avro 1.11.0 api
- org.apache.commons:commons-configuration2 2.0 api
- org.apache.kafka:kafka-streams 2.4.0 api
- com.google.code.gson:gson 2.8.2 implementation
- com.google.guava:guava 24.1-jre implementation
- commons-beanutils:commons-beanutils 1.9.2 implementation
- io.confluent:kafka-streams-avro-serde 5.3.2 implementation
- org.apache.kafka:kafka-clients 2.4.0 implementation
- org.slf4j:slf4j-api 1.7.25 implementation
- com.github.stefanbirkner:system-rules 1.17.0 testImplementation
- org.junit.jupiter:junit-jupiter-api 5.3.1 testImplementation
- com.google.guava:guava 30.1-jre implementation
- org.apache.flink:flink-avro-confluent-registry ${flinkVersion} implementation
- org.industrial-devops:titan-ccp-common 0.1.0-flink-ready-SNAPSHOT implementation
- junit:junit 4.12 testImplementation
- com.hazelcast.jet:hazelcast-jet 4.5 implementation
- com.hazelcast.jet:hazelcast-jet-kafka 4.5 implementation
- com.hazelcast:hazelcast-kubernetes 2.2.2 implementation
- io.confluent:kafka-avro-serializer 5.3.0 implementation
- org.industrial-devops:titan-ccp-common 0.1.0-SNAPSHOT implementation
- org.industrial-devops:titan-ccp-common-kafka 0.1.0-SNAPSHOT implementation
- org.slf4j:slf4j-api 1.7.25 implementation
- com.google.code.gson:gson 2.8.2 implementation
- io.javalin:javalin 4.3.0 implementation
- io.micrometer:micrometer-core 1.8.3 implementation
- io.micrometer:micrometer-registry-prometheus 1.8.3 implementation
- org.slf4j:slf4j-simple 1.7.25 runtimeOnly
- junit:junit 4.12 testImplementation
- org.apache.kafka:kafka-streams 3.1.0 implementation
- org.slf4j:slf4j-simple 1.7.25 implementation
- junit:junit 4.12 testImplementation
- com.google.cloud:google-cloud-pubsub * implementation
- com.google.code.gson:gson 2.8.2 implementation
- com.google.guava:guava 30.1-jre implementation
- com.google.protobuf:protobuf-java-util * implementation
- com.hazelcast:hazelcast 4.1.1 implementation
- com.hazelcast:hazelcast-kubernetes 2.2.1 implementation
- org.apache.kafka:kafka-streams 2.6.0 implementation
- org.slf4j:slf4j-simple 1.7.25 implementation
- com.github.tomakehurst:wiremock-jre8 2.32.0 testImplementation
- junit:junit 4.12 testImplementation
- org.apache.beam:beam-sdks-java-io-google-cloud-platform 2.35.0 implementation
- com.google.code.gson:gson 2.8.9 implementation
- junit:junit 4.12 testImplementation
- io.confluent:kafka-streams-avro-serde 5.3.2 implementation
- jupyter ==1.0.0
- matplotlib ==3.2.0
- pandas ==1.0.1
- scikit-learn ==0.22.2.post1
- jupyter ==1.0.0
- matplotlib ==3.2.0
- pandas ==1.0.1
- scikit-learn ==0.22.2.post1
- fastapi >=0.68.0,<0.69.0
- pandas ==1.0.3
- requests *
- uvicorn >=0.15.0,<0.16.0
- fastapi >=0.68.0,<0.69.0
- pandas ==1.0.3
- requests *
- uvicorn >=0.15.0,<0.16.0
- fastapi >=0.68.0,<0.69.0
- pandas ==1.0.3
- requests *
- scikit-learn ==0.22.2
- uvicorn >=0.15.0,<0.16.0
- github-pages >= 0 development
- html-proofer >= 0
- tzinfo ~> 1.2
- tzinfo-data >= 0
- wdm ~> 0.1.1
- 104 dependencies
- jupyter/base-notebook python-3.8 build
- docker ${DOCKER_VERSION build
- docker ${DOCKER_VERSION} build
- alpine 3.12 build
- python 3.8 build
- python 3.8 build
- python 3.8 build
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc1-beam-flink ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc1-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc1-beam-samza ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc1-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc1-flink ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc1-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc1-hazelcastjet ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc1-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc1-kstreams-app ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc1-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc2-beam-flink ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc2-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc2-beam-samza ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc2-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc2-flink ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc2-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc2-hazelcastjet ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc2-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc2-kstreams-app ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc2-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc3-beam-flink ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc3-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc3-beam-samza ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc3-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc3-flink ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc3-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc3-hazelcastjet ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc3-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc3-kstreams-app ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc3-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc4-beam-flink ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc4-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc4-beam-samza ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc4-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc4-flink ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc4-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc4-hazelcastjet ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc4-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- confluentinc/cp-schema-registry 7.0.1
- confluentinc/cp-zookeeper latest
- edenhill/kcat 1.7.1
- ghcr.io/cau-se/theodolite-uc4-kstreams-app ${THEODOLITE_TAG
- ghcr.io/cau-se/theodolite-uc4-workload-generator ${THEODOLITE_TAG
- wurstmeister/kafka latest
- openjdk 11-slim build
- flink 1.13-java11 build
- openjdk 11-slim build
- flink 1.13-java11 build
- openjdk 11-slim build
- openjdk 11-slim build
- openjdk 11-slim build
- flink 1.13-java11 build
- openjdk 11-slim build
- flink 1.13-java11 build
- openjdk 11-slim build
- openjdk 11-slim build
- openjdk 11-slim build
- flink 1.13-java11 build
- openjdk 11-slim build
- flink 1.13-java11 build
- openjdk 11-slim build
- openjdk 11-slim build
- openjdk 11-slim build
- flink 1.13-java11 build
- openjdk 11-slim build
- flink 1.13-java11 build
- openjdk 11-slim build
- openjdk 11-slim build
- openjdk 11-slim build