https://github.com/smartcat-labs/berserker
Berserker is load generator with pluggable input source and configurable output.
https://github.com/smartcat-labs/berserker
Last synced: 6 months ago
JSON representation
Berserker is load generator with pluggable input source and configurable output.
- Host: GitHub
- URL: https://github.com/smartcat-labs/berserker
- Owner: smartcat-labs
- License: apache-2.0
- Created: 2017-05-22T14:21:01.000Z (about 8 years ago)
- Default Branch: dev
- Last Pushed: 2022-12-14T20:32:56.000Z (over 2 years ago)
- Last Synced: 2023-03-01T21:22:31.185Z (over 2 years ago)
- Language: Java
- Homepage:
- Size: 620 KB
- Stars: 52
- Watchers: 18
- Forks: 8
- Open Issues: 26
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Berserker
Load generator with modular architecture.
[](https://travis-ci.org/smartcat-labs/berserker)
[  ](https://bintray.com/smartcat-labs/maven/berserker/_latestVersion)## Introduction
Berserker is designed to be modular from beginning as illustrated on the following diagram.

Rate generator controls the rate at which load generator operates, rate is expressed on per second basis, or better say, number of impulses which will be generated within one second. Each time impulse is generated load generator fetches data from data source and passes it to worker. Since those are simple interfaces, it is easy to add additional module implementing either data source, worker and even rate generator.
Following diagram represents possible modules for Load Generator of which some are already implemented.
Berserker is designed as command line tool, but having modular architecture makes it easy to use it as Java library as well.
### Berserker Commons
[Berserker Commons](berserker-commons) holds interface for core and configuration and it provides signature all the modules need to confront to be able to work together.
### Berserker Core
[Berserker Core](berserker-core) contains load generator implementation, and common implementations of data source, rate generator and worker.
### Berserker Runner
[Berserker Runner](berserker-runner) represents runnable jar where desired data source, rate generator and worker can be specified within YAML configuration.
Following section illustrates YAML configuration example.```yaml
load-generator-configuration:
data-source-configuration-name: Ranger
rate-generator-configuration-name: default
worker-configuration-name: Cassandra
metrics-reporter-configuration-name: JMX
thread-count: 10
queue-capacity: 100000data-source-configuration:
values:
id: uuid()
firstName: random(['Peter', 'Mike', 'Steven', 'Joshua', 'John', 'Brandon'])
lastName: random(['Smith', 'Johnson', 'Williams', 'Davis', 'Jackson', 'White', 'Lewis', 'Clark'])
age: random(20..45)
email: string('{}@domain.com', randomLengthString(5))
statement:
consistencyLevel: ONE
query: string("INSERT INTO person (id, first_name, last_name, age, email) VALUES ({}, '{}', '{}', {}, '{}');", $id, $firstName, $lastName, $age, $email)
output: $statementrate-generator-configuration:
rates:
r: 1000
output: $rworker-configuration:
connection-points: 0.0.0.0:32770
keyspace: my_keyspace
async: false
bootstrap-commands:
- "CREATE KEYSPACE IF NOT EXISTS my_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};"
- USE my_keyspace;
- CREATE TABLE IF NOT EXISTS person (id uuid, first_name text, last_name text, age int, email text, primary key (id));metrics-reporter-configuration:
domain: berserker
filter:
```Main part of configuration is `load-generator-configuration` where concrete modules which will be used for data source, rate generator and worker need to be specified. After `load-generator-configuration` section, there should be exactly one section for data source, rate generator and worker.
Each section is allowed to contain module specific configuration as configuration interpretation will be done by module itself.
In order for berserker-runner to be able to find particular module, each module jar must be in classpath.#### Rate generator configuration
Documentation on rate generator configuration can be found [here](rate-generator-configuration.md).
### Modules
List of existing modules:
#### Berserker Ranger
[Berserker Ranger](berserker-ranger) is Ranger data source implementation.
#### Berserker Kafka
[Berserker Kafka](berserker-kafka) is worker implementation which sends messages to Kafka cluster.
#### Berserker Cassandra
[Berserker Cassandra](berserker-cassandra) is worker implementation which executes CQL statements on Cassandra cluster.#### Berserker HTTP
[Berserker HTTP](berserker-http) is worker implementation which sends HTTP request on configured endpoint.#### Berserker RabbitMQ
[Berserker RabbitMQ](berserker-rabbitmq) is worker implementation which sends AMQP messages to RabbitMQ.#### Berserker MQTT
[Berserker MQTT](berserker-mqtt) is worker implementation which publishes messages to MQTT broker.### Usage
Berserker can be used either as a library or as a stand-alone command line tool.
Configuration [examples](berserker-runner/src/example/resources) can be used as starting point.#### Library usage
Artifact can be fetched from bintray.
Add following `repository` element to your `` section in `pom.xml`:
```xml
bintray-smartcat-labs-maven
bintray
https://dl.bintray.com/smartcat-labs/maven```
Add the `dependency` element to your `` section in `pom.xml` depending which `artifact` and `version` you need:
```xml
io.smartcat
artifact
version```
#### Command line tool usage
- Download latest [Berserker Runner](https://bintray.com/smartcat-labs/maven/berserker) version.
- Create config file (example can be found [here](berserker-runner/src/example/resources/ranger-cassandra.yml)).
- Run following command: `java -jar berserker-runner-.jar -c `
- If you need to specify logging options, you can run berserker this way: `java -jar -Dlogback.configurationFile= berserker-runner-.jar -c `