Vereinfachtes setup aus Grundlagen-Übungen übernommen
[demos/kafka/training] / README.sh
index 9bca150..6d555fd 100755 (executable)
--- a/README.sh
+++ b/README.sh
@@ -4,34 +4,119 @@ IMAGE=juplo/rest-producer:1.0-SNAPSHOT
 
 if [ "$1" = "cleanup" ]
 then
-  docker-compose down -v
+  docker-compose -f docker/docker-compose.yml down -t0 -v --remove-orphans
   mvn clean
   exit
 fi
 
-docker-compose up -d zookeeper kafka cli
+docker-compose -f docker/docker-compose.yml up -d --remove-orphans kafka-1 kafka-2 kafka-3
+docker-compose -f docker/docker-compose.yml rm -svf producer producer-0 producer-1
 
 if [[
   $(docker image ls -q $IMAGE) == "" ||
   "$1" = "build"
 ]]
 then
-  mvn install || exit
+  mvn clean install || exit
 else
   echo "Using image existing images:"
   docker image ls $IMAGE
 fi
 
-echo "Waiting for the Kafka-Cluster to become ready..."
-docker-compose exec cli cub kafka-ready -b kafka:9092 1 60 > /dev/null 2>&1 || exit 1
-docker-compose up setup
-docker-compose up -d
+docker-compose -f docker/docker-compose.yml up --remove-orphans setup || exit 1
 
-sleep 15
+docker-compose -f docker/docker-compose.yml up -t0 -d cli
+sleep 1
+docker-compose -f docker/docker-compose.yml logs setup
 
-echo foo | http :8080/bar
-dd if=/dev/zero bs=1024 count=1024  | http :8080/fehler
-http :8081/seen
+docker-compose -f docker/docker-compose.yml up -d producer
+while ! [[ $(http 0:8080/actuator/health 2> /dev/null) =~ "UP" ]]; do echo "Waiting for producer..."; sleep 1; done
 
-docker-compose stop producer consumer
-docker-compose logs producer
+# tag::hashed[]
+echo -n Nachricht 1 an klaus über producer | http -v :8080/klaus
+# end::hashed[]
+echo -n Nachricht 2 an klaus über producer | http -v :8080/klaus
+# tag::hashed[]
+echo -n Nachricht 1 an peter über producer | http -v :8080/peter
+# end::hashed[]
+echo -n Nachricht 3 an klaus über producer | http -v :8080/klaus
+echo -n Nachricht 2 an peter über producer | http -v :8080/peter
+echo -n Nachricht 3 an peter über producer | http -v :8080/peter
+
+echo Nachrichten in Partition 0:
+kafkacat -b :9092 -t test -o 0 -p0 -f'key: %k\toffset: %o\tvalue: %s\n' -qe
+echo
+echo Nachrichten in Partition 1:
+kafkacat -b :9092 -t test -o 0 -p1 -f'key: %k\toffset: %o\tvalue: %s\n' -qe
+echo
+
+docker-compose -f docker/docker-compose.yml exec -T cli bash << 'EOF'
+echo "Altering number of partitions from 2 to 3..."
+kafka-topics --bootstrap-server kafka:9092 --describe --topic test
+# tag::repartitioning[]
+kafka-topics --bootstrap-server kafka:9092 --alter --topic test --partitions 3
+# end::repartitioning[]
+kafka-topics --bootstrap-server kafka:9092 --describe --topic test
+EOF
+
+docker-compose -f docker/docker-compose.yml restart producer
+while ! [[ $(http 0:8080/actuator/health 2> /dev/null) =~ "UP" ]]; do echo "Waiting for producer..."; sleep 1; done
+
+echo -n Nachricht 4 an klaus über producer | http -v :8080/klaus
+echo -n Nachricht 5 an peter über producer | http -v :8080/peter
+echo -n Nachricht 4 an peter über producer | http -v :8080/peter
+echo -n Nachricht 5 an klaus über producer | http -v :8080/klaus
+echo -n Nachricht 6 an klaus über producer | http -v :8080/klaus
+echo -n Nachricht 6 an peter über producer | http -v :8080/peter
+
+echo Nachrichten in Partition 0:
+# tag::kafkacat[]
+kafkacat -b :9092 -t test -o 0 -p0 -f'key: %k\toffset: %o\tvalue: %s\n' -qe
+# end::kafkacat[]
+echo
+echo Nachrichten in Partition 1:
+# tag::kafkacat[]
+kafkacat -b :9092 -t test -o 0 -p1 -f'key: %k\toffset: %o\tvalue: %s\n' -qe
+# end::kafkacat[]
+echo
+echo Nachrichten in Partition 2:
+kafkacat -b :9092 -t test -o 0 -p2 -f'key: %k\toffset: %o\tvalue: %s\n' -qe
+
+
+docker-compose -f docker/docker-compose.yml restart setup
+sleep 1
+docker-compose -f docker/docker-compose.yml up -d producer-0 producer-1
+while ! [[ $(http 0:8000/actuator/health 2> /dev/null) =~ "UP" ]]; do echo "Waiting for producer-0..."; sleep 1; done
+while ! [[ $(http 0:8001/actuator/health 2> /dev/null) =~ "UP" ]]; do echo "Waiting for producer-1..."; sleep 1; done
+
+# tag::fixed[]
+echo -n Nachricht 1 über producer-0 | http -v :8000/klaus
+echo -n Nachricht 1 über producer-1 | http -v :8001/klaus
+echo -n Nachricht 2 über producer-0 | http -v :8000/peter
+echo -n Nachricht 2 über producer-1 | http -v :8001/peter
+# end::fixed[]
+
+docker-compose -f docker/docker-compose.yml exec -T cli bash << 'EOF'
+echo "Altering number of partitions from 2 to 3..."
+kafka-topics --bootstrap-server kafka:9092 --describe --topic test
+kafka-topics --bootstrap-server kafka:9092 --alter --topic test --partitions 3
+kafka-topics --bootstrap-server kafka:9092 --describe --topic test
+EOF
+
+docker-compose -f docker/docker-compose.yml restart producer-0 producer-1
+while ! [[ $(http 0:8000/actuator/health 2> /dev/null) =~ "UP" ]]; do echo "Waiting for producer-0..."; sleep 1; done
+while ! [[ $(http 0:8001/actuator/health 2> /dev/null) =~ "UP" ]]; do echo "Waiting for producer-1..."; sleep 1; done
+
+echo -n Nachricht 3 über producer-0 | http -v :8000/klaus
+echo -n Nachricht 3 über producer-1 | http -v :8001/klaus
+echo -n Nachricht 4 über producer-0 | http -v :8000/peter
+echo -n Nachricht 4 über producer-1 | http -v :8001/peter
+
+echo Nachrichten in Partition 0:
+kafkacat -b :9092 -t test -o 0 -p0 -f'key: %k\toffset: %o\tvalue: %s\n' -qe
+echo
+echo Nachrichten in Partition 1:
+kafkacat -b :9092 -t test -o 0 -p1 -f'key: %k\toffset: %o\tvalue: %s\n' -qe
+echo
+echo Nachrichten in Partition 2:
+kafkacat -b :9092 -t test -o 0 -p2 -f'key: %k\toffset: %o\tvalue: %s\n' -qe