Base project for kafka-streams development and testing
- Linux
~ ❯ cat /etc/*-release
...
NAME="Ubuntu"
VERSION="17.04 (Zesty Zapus)"
...
- docker
~ ❯ docker -v
Docker version 17.12.0-ce, build c97c6d6
- docker-compose
~ ❯ docker-compose -v
docker-compose version 1.13.0, build 1719ceb
- docker-machine
~ ❯ docker-machine -v
docker-machine version 0.13.0, build 9ba6da9
- virtualBox
~ ❯ vboxmanage -v ⏎
5.1.22_Ubuntur115126
- Intel(R) Core(TM) i7-4700HQ CPU @ 2.40GHz (8 cores)
- 1Gbit/s Killer E220x Gigabit Ethernet Controller
- 16GiB of Memory
- 1TB ATA Disk
- Create three docker-machine instances (node-1, node-2, node-3) with 4GB of memory and 2 CPU cores each:
# Use a loop if you like :)
docker-machine create --driver virtualbox --virtualbox-no-dns-proxy --virtualbox-memory "4096" --virtualbox-cpu-count "2" node-1
docker-machine create --driver virtualbox --virtualbox-no-dns-proxy --virtualbox-memory "4096" --virtualbox-cpu-count "2" node-2
docker-machine create --driver virtualbox --virtualbox-no-dns-proxy --virtualbox-memory "4096" --virtualbox-cpu-count "2" node-3
- Setup node-1 as swarm manager :
# Get node-1 ip address
MANAGERIP=$(docker-machine ssh node-1 "ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p' | grep 99")
# Init swarm group and set node-1 as manager
docker-machine ssh node-1 "docker swarm init --advertise-addr $MANAGERIP --listen-addr $MANAGERIP"
- Join node-2 and node-3 as workers:
# Get swarm group join token
SWARMTOKEN=$(docker-machine ssh node-1 "docker swarm join-token -q worker")
# join node-2 as workers
docker-machine ssh node-2 "docker swarm join --token $SWARMTOKEN $MANAGERIP:2377"
# join node-2 as workers
docker-machine ssh node-3 "docker swarm join --token $SWARMTOKEN $MANAGERIP:2377"
- Make sure that your Linux host machine has the right dns in
bash /etc/resolv.conf
~ ❯ cat /etc/resolv.conf
nameserver 8.8.8.8
- Check that all nodes are up
~ ❯ docker-machine ls ⏎
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
node-1 - virtualbox Running tcp://192.168.99.100:2376 v17.12.1-ce
node-2 - virtualbox Running tcp://192.168.99.101:2376 v17.12.1-ce
node-3 - virtualbox Running tcp://192.168.99.102:2376 v17.12.1-ce
- Check that swarm group is set up correctly
~ ❯ docker-machine ssh node-1 'docker node ls'
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
oqs2piqwdhl7axk59yunl4muu * node-1 Ready Active Leader
wmu77zmdhq60ge579jxs6x7as node-2 Ready Active
ukeq86oqsz0ove0lleic9xk0a node-3 Ready Active
- connect to the swarm manager node
~ ❯ docker-machine ssh node-1
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 17.12.1-ce, build HEAD : 42357fc - Wed Feb 28 17:52:00 UTC 2018
Docker version 17.12.1-ce, build 7390fc6
docker@node-1:~$
- copy and paste the infra/kafka-cluster-swarm.yml content and run the command below
docker@node-1:~$ docker stack deploy --compose-file kafka-cluster-swarm.yml kafka-cluster
- navigate to container visualizer at http://192.168.99.100:8080 to check stack services status :)
NB: You need to modify the stack Yaml file to suit configuration for your test here i show how to run them only
- on Linux host machine download Kafka and extract it somewhere
/tmp ❯ wget -qO- http://apache.crihan.fr/dist/kafka/1.0.0/kafka_2.12-1.0.0.tgz | tar xvz
/tmp ❯ cd kafka_2.12-1.0.0
- launch a perf test
# create test topic
kafka_2.12-1.0.0 ❯ bin/kafka-topics.sh --create --zookeeper 192.168.99.100:12181,192.168.99.101:22181,192.168.99.102:32181 --replication-factor 1 --partitions 2 --topic benchmark-1-2-none
# run perf script
kafka_2.12-1.0.0 ❯ bin/kafka-producer-perf-test.sh --topic benchmark-2-2-none --num-records 15000000 --record-size 100 --throughput 15000000 --producer-props acks=1 bootstrap.servers=192.168.99.100:19092,192.168.99.101:29092 buffer.memory=67108864 compression.type=none batch.size=8196
1396651 records sent, 278272.8 records/sec (26.54 MB/sec), 1433.7 ms avg latency, 2278.0 max latency.
2113736 records sent, 422747.2 records/sec (40.32 MB/sec), 1423.1 ms avg latency, 1965.0 max latency.
2194914 records sent, 438982.8 records/sec (41.86 MB/sec), 1349.2 ms avg latency, 2281.0 max latency.
2185516 records sent, 437103.2 records/sec (41.69 MB/sec), 1398.3 ms avg latency, 2538.0 max latency.
2134530 records sent, 426906.0 records/sec (40.71 MB/sec), 1441.6 ms avg latency, 2425.0 max latency.
2186552 records sent, 437310.4 records/sec (41.71 MB/sec), 1360.0 ms avg latency, 2211.0 max latency.
2179966 records sent, 435993.2 records/sec (41.58 MB/sec), 1372.1 ms avg latency, 2256.0 max latency.
15000000 records sent, 407110.869860 records/sec (38.83 MB/sec), 1407.67 ms avg latency, 2538.00 ms max latency, 2010 ms 50th, 2385 ms 95th, 2487 ms 99th, 2536 ms 99.9th.