Storm ships a Docker Compose configuration under docker/ that provisions a fully distributed cluster on a single machine. Unlike local mode, this setup forces inter-worker traffic across real sockets, making it suitable for benchmarking serialization, compression, and network-sensitive behaviours that only appear with genuine inter-process communication.
netsim.sh — a utility that injects controlled latency and jitter between Supervisors using tc netemcd docker/ docker compose up -d
Once healthy, Grafana is available at http://localhost:3000 (default credentials: admin / admin). The Storm UI is at http://localhost:8080.
The storm-perf module contains topologies designed for this environment:
storm jar storm-perf/target/storm-perf-*.jar \ org.apache.storm.perf.FileReadWordCountTopo \ -c nimbus.seeds='["nimbus"]' \ -c storm.zookeeper.servers='["zookeeper"]'
Any topology JAR works. Point nimbus.seeds and storm.zookeeper.servers at the Docker hostnames as shown above.
netsim.sh wraps tc netem to shape traffic between the two Supervisor containers:
# Add 3 ms latency and 1 ms jitter (typical intra-datacenter profile) ./netsim.sh apply 3ms 1ms # Remove all shaping ./netsim.sh reset # Show current tc settings on both supervisors ./netsim.sh status # Round-trip ping between supervisors ./netsim.sh ping
Changes take effect immediately and are visible in the Grafana latency panels in real time.
docker compose down
Persistent volumes are not configured; all topology data and metrics are lost on teardown. This cluster is intended for development and benchmarking, not production use.