== What is this app? This is an example of a Spring Cloud Stream processor using Kafka Streams support. The example is based on a contrived use case of tracking products by interactively querying their status. The program accepts product ID's and track their counts hitherto by interactively querying the underlying store. \ This sample uses lambda expressions and thus requires Java 8+. ==== Starting Kafka in a docker container * Skip steps 1-3 if you already have a non-Docker Kafka environment. 1. Go to the docker directory in this repo and invoke the command `docker-compose up -d`. 2. Ensure that in the docker directory and then invoke the script `start-kafka-shell.sh` 3. cd $KAFKA_HOME 4. Start the console producer: + Assuming that you are running kafka on a docker container on mac osx. Change the zookeeper IP address accordingly otherwise. + `bin/kafka-console-producer.sh --broker-list 192.168.99.100:9092 --topic products` === Running the app: Go to the root of the repository and do: `./mvnw clean package` `java -jar target/kstream-interactive-query-0.0.1-SNAPSHOT.jar --kstream.product.tracker.productIds=123,124,125` The above command will track products with ID's 123,124 and 125 and print their counts seen so far every 30 seconds. * By default we use the docker container IP (mac osx specific) in the `application.yml` for Kafka broker and zookeeper. Change it in `application.yml` (which requires a rebuild) or pass them as runtime arguments as below. `spring.cloud.stream.kstream.binder.brokers=` + `spring.cloud.stream.kstream.binder.zkNodes=` Enter the following in the console producer (one line at a time) and watch the output on the console (or IDE) where the application is running. ``` {"id":"123"} {"id":"124"} {"id":"125"} {"id":"123"} {"id":"123"} {"id":"123"} ```