├── .gitignore
├── Figures
├── Figure-11.1.jpg
├── Figure-11.2.jpg
├── Figure-11.3.jpg
├── Figure-13.1.jpg
├── Figure-13.2.jpg
├── Figure-13.3.jpg
├── Figure-13.4.jpg
├── Figure-13.5.jpg
├── Figure-13.6.jpg
├── Figure-14.1.jpg
├── Figure-14.10.jpg
├── Figure-14.11.jpg
├── Figure-14.12.jpg
├── Figure-14.13.jpg
├── Figure-14.14.jpg
├── Figure-14.2.jpg
├── Figure-14.3.jpg
├── Figure-14.4.jpg
├── Figure-14.5.jpg
├── Figure-14.6.jpg
├── Figure-14.7.jpg
├── Figure-14.8.jpg
├── Figure-14.9.jpg
├── Figure-15.1.jpg
├── Figure-15.2.jpg
├── Figure-15.3.jpg
├── Figure-17.1.jpg
├── Figure-17.2.jpg
├── Figure-17.3.jpg
├── Figure-17.4.jpg
├── Figure-18.1.jpg
├── Figure-19.1.jpg
├── Figure-19.2.jpg
├── Figure-19.3.jpg
├── Figure-19.4.jpg
├── Figure-19.5.jpg
├── Figure-2.1.jpg
├── Figure-2.2.jpg
├── Figure-2.3.jpg
├── Figure-20.1.jpg
├── Figure-20.2.jpg
├── Figure-3.1.jpg
├── Figure-3.2.jpg
├── Figure-3.3.jpg
├── Figure-3.4.jpg
├── Figure-3.5.jpg
├── Figure-3.6.jpg
├── Figure-3.7.jpg
├── Figure-4.1.jpg
├── Figure-4.2.jpg
├── Figure-4.3.jpg
├── Figure-4.4.jpg
├── Figure-4.5.jpg
├── Figure-4.6.jpg
├── Figure-4.7.jpg
├── Figure-5.1.jpg
├── Figure-6.1.jpg
├── Figure-6.10.jpg
├── Figure-6.2.jpg
├── Figure-6.3.jpg
├── Figure-6.4.jpg
├── Figure-6.5.jpg
├── Figure-6.6.jpg
├── Figure-6.7.jpg
├── Figure-6.8.jpg
├── Figure-6.9.jpg
├── Figure-7.1.jpg
├── Figure-7.2.jpg
├── Figure-7.3.jpg
├── Figure-7.4.jpg
├── Figure-7.5.jpg
├── Figure-7.6.jpg
├── Figure-A.1.jpg
├── Figure-A.2.jpg
├── Figure-A.3.jpg
├── Figure-A.4.jpg
├── Figure-A.5.jpg
├── Figure-A.6.jpg
└── Figure-A.7.jpg
├── LICENSE
├── README.md
├── ad-campaigns
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-producer_ad-clicks.cmd
│ ├── start-producer_ad-impressions.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── CampaignPerformanceApp.java
│ │ ├── common
│ │ ├── AppConfigs.java
│ │ └── AppSerdes.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ ├── AdClick.java
│ │ ├── AdImpression.java
│ │ └── CampaignPerformance.java
│ └── resources
│ ├── data
│ └── sample.txt
│ ├── log4j2.xml
│ └── schema
│ ├── AdClick.json
│ ├── AdImpression.json
│ └── CampaignPerformance.json
├── age-count
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-producer.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── AgeCountDemo.java
│ │ └── AppConfigs.java
│ └── resources
│ ├── data
│ └── data.txt
│ └── log4j2.xml
├── avro-consumer
├── README.md
├── pom.xml
├── scripts
│ ├── start-kafka-server.cmd
│ ├── start-schema-registry.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── AvroConsumer.java
│ │ └── StockData.java
│ └── resources
│ ├── kafka.properties
│ ├── log4j2.xml
│ └── schema
│ └── srock-data.avsc
├── avro-producer
├── README.md
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-consumer.cmd
│ ├── start-kafka-server.cmd
│ ├── start-schema-registry.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── AvroProducerDemo.java
│ │ ├── Dispatcher.java
│ │ └── StockData.java
│ └── resources
│ ├── data
│ ├── NSE05NOV2018BHAV.csv
│ └── NSE06NOV2018BHAV.csv
│ ├── kafka.properties
│ ├── log4j2.xml
│ └── schema
│ └── srock-data.avsc
├── callback-producer
├── README.md
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-consumer.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ └── CallbackProducer.java
│ └── resources
│ └── log4j2.xml
├── counting-session
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-producer.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── CountingSessionApp.java
│ │ ├── common
│ │ ├── AppConfigs.java
│ │ ├── AppSerdes.java
│ │ └── AppTimestampExtractor.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ └── UserClicks.java
│ └── resources
│ ├── data
│ └── sample-data.txt
│ ├── log4j2.xml
│ └── schema
│ └── UserClicks.json
├── counting-window
├── README.md
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-producer.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── AppConfigs.java
│ │ ├── AppSerdes.java
│ │ ├── CountingWindowApp.java
│ │ ├── InvoiceTimeExtractor.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ └── SimpleInvoice.java
│ └── resources
│ ├── data
│ └── sample-invoices.txt
│ ├── log4j2.xml
│ └── schema
│ └── Invoice.json
├── custom-sink
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── producer-topic-table-map.cmd
│ ├── producer-topic1.cmd
│ ├── producer-topic2.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── AppConfigs.java
│ │ ├── AppSerdes.java
│ │ ├── CustomSinkApp.java
│ │ ├── RecordTransformer.java
│ │ ├── SinkProcessor.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ ├── GenericRecord.java
│ │ └── TableMap.java
│ └── resources
│ ├── data
│ └── data.txt
│ ├── log4j2.xml
│ └── schema
│ ├── generic_record.json
│ └── table-map.json
├── custom-window
├── pom.xml
├── scripts
│ ├── consumer.cmd
│ ├── create-topic.cmd
│ ├── producer.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── AppConfigs.java
│ │ ├── AppSerdes.java
│ │ ├── StockFeedApp.java
│ │ ├── StockProcessor.java
│ │ ├── StockPunctuator.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ ├── StockTicker.java
│ │ └── TickerStack.java
│ └── resources
│ ├── data
│ └── data.txt
│ ├── log4j2.xml
│ └── schema
│ └── stock-ticker.json
├── hello-producer
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-consumer.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── HelloProducer.java
│ │ └── common
│ │ └── AppConfigs.java
│ └── resources
│ └── log4j2.xml
├── hello-streams
├── README.md
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-consumer.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── HelloProducer.java
│ │ └── HelloStreams.java
│ └── resources
│ └── log4j2.xml
├── json-consumer
├── README.md
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-consumer.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── JsonConsumer.java
│ │ ├── JsonDeserializer.java
│ │ ├── RunnableConsumer.java
│ │ └── StockData.java
│ └── resources
│ ├── kafka.properties
│ ├── log4j2.xml
│ └── schema
│ └── stock-data.json
├── json-producer
├── README.md
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-consumer.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── Dispatcher.java
│ │ ├── JsonProducerDemo.java
│ │ ├── JsonSerializer.java
│ │ └── StockData.java
│ └── resources
│ ├── data
│ ├── NSE05NOV2018BHAV.csv
│ └── NSE06NOV2018BHAV.csv
│ ├── kafka.properties
│ ├── log4j2.xml
│ └── schema
│ └── stock-data.json
├── kstream-aggregate
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-producer.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── AppConfigs.java
│ │ ├── AppSerdes.java
│ │ ├── KStreamAggDemo.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ ├── DepartmentAggregate.java
│ │ └── Employee.java
│ └── resources
│ ├── data
│ └── data.txt
│ ├── log4j2.xml
│ └── schema
│ ├── department_aggregates.json
│ └── employees.json
├── ktable-aggregate-query
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-producer.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── AppConfigs.java
│ │ ├── AppRestService.java
│ │ ├── AppSerdes.java
│ │ ├── KTableAggDemo.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ ├── DepartmentAggregate.java
│ │ └── Employee.java
│ └── resources
│ ├── data
│ └── data.txt
│ ├── log4j2.xml
│ └── schema
│ ├── department_aggregates.json
│ └── employees.json
├── ktable-aggregate
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-producer.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── AppConfigs.java
│ │ ├── AppSerdes.java
│ │ ├── KTableAggDemo.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ ├── DepartmentAggregate.java
│ │ └── Employee.java
│ └── resources
│ ├── data
│ └── data.txt
│ ├── log4j2.xml
│ └── schema
│ ├── department_aggregates.json
│ └── employees.json
├── last-login
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-producer-user-login.cmd
│ ├── start-producer-user-master.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── LastLoginDemo.java
│ │ ├── common
│ │ ├── AppConfigs.java
│ │ └── AppSerdes.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ ├── UserDetails.java
│ │ └── UserLogin.java
│ └── resources
│ ├── data
│ └── sample.txt
│ ├── log4j2.xml
│ └── schema
│ ├── UserDetails.json
│ └── UserLogins.json
├── partitioned-producer
├── README.md
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-consumer.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── OddEvenPartitioner.java
│ │ └── PartitionedProducer.java
│ └── resources
│ └── log4j2.xml
├── pojo-from-avro
├── README.md
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ └── types
│ │ └── Notification.java
│ └── resources
│ ├── log4j2.xml
│ └── schema
│ └── notification.avsc
├── pojo-from-json
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ └── types
│ │ └── Notification.java
│ └── resources
│ ├── log4j2.xml
│ └── schema
│ └── notification.json
├── pos-fanout-avro
├── README.md
├── pom.xml
├── scripts
│ ├── start-hadoop-sink-consumer.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-schema-registry.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── FanOutConfigs.java
│ │ ├── PosFanOutApp.java
│ │ ├── PosSerdes.java
│ │ ├── RecordBuilder.java
│ │ └── types
│ │ ├── DeliveryAddress.java
│ │ ├── HadoopRecord.java
│ │ ├── Notification.java
│ │ ├── PosInvoice.java
│ │ └── PosLineItem.java
│ └── resources
│ ├── log4j2.xml
│ └── schema
│ ├── HadoopRecord.avsc
│ ├── Invoice.avsc
│ └── Notification.avsc
├── pos-fanout
├── README.md
├── pom.xml
├── scripts
│ ├── create-hadoop-topic.cmd
│ ├── create-loyalty-topic.cmd
│ ├── create-shipment-topic.cmd
│ ├── start-hadoop-sink-consumer.cmd
│ ├── start-loyalty-consumer.cmd
│ └── start-shipment-consumer.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── FanOutConfigs.java
│ │ ├── PosFanOutApp.java
│ │ ├── PosSerdes.java
│ │ ├── RecordBuilder.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ ├── DeliveryAddress.java
│ │ ├── HadoopRecord.java
│ │ ├── Notification.java
│ │ ├── PosInvoice.java
│ │ └── PosLineItem.java
│ └── resources
│ ├── log4j2.xml
│ └── schema
│ ├── HadoopRecord.json
│ ├── Invoice.json
│ └── Notification.json
├── pos-simulator-avro
├── README.md
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-consumer.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-schema-registry.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── PosSimulator.java
│ │ ├── RunnableProducer.java
│ │ ├── datagenerator
│ │ ├── AddressGenerator.java
│ │ ├── InvoiceGenerator.java
│ │ └── ProductGenerator.java
│ │ └── types
│ │ ├── DeliveryAddress.java
│ │ ├── PosInvoice.java
│ │ └── PosLineItem.java
│ └── resources
│ ├── data
│ ├── Invoice.json
│ ├── address.json
│ └── products.json
│ ├── log4j2.xml
│ └── schema
│ └── Invoice.avsc
├── pos-simulator
├── README.md
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-consumer.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── PosSimulator.java
│ │ ├── RunnableProducer.java
│ │ ├── datagenerator
│ │ ├── AddressGenerator.java
│ │ ├── InvoiceGenerator.java
│ │ └── ProductGenerator.java
│ │ ├── serde
│ │ └── JsonSerializer.java
│ │ └── types
│ │ ├── DeliveryAddress.java
│ │ ├── PosInvoice.java
│ │ └── PosLineItem.java
│ └── resources
│ ├── data
│ ├── Invoice.json
│ ├── address.json
│ └── products.json
│ ├── log4j2.xml
│ └── schema
│ └── Invoice.json
├── producer-threads
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-consumer.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── Dispatcher.java
│ │ └── DispatcherDemo.java
│ └── resources
│ ├── data
│ ├── NSE05NOV2018BHAV.csv
│ └── NSE06NOV2018BHAV.csv
│ ├── kafka.properties
│ └── log4j2.xml
├── rewards-in-memory
├── pom.xml
├── scripts
│ ├── create-intermediate-topic.cmd
│ ├── create-loyalty-topic.cmd
│ └── start-loyalty-consumer.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── AppConfigs.java
│ │ ├── PosSerdes.java
│ │ ├── RecordBuilder.java
│ │ ├── RewardsApp.java
│ │ ├── RewardsPartitioner.java
│ │ ├── RewardsTransformer.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ ├── DeliveryAddress.java
│ │ ├── Notification.java
│ │ ├── PosInvoice.java
│ │ └── PosLineItem.java
│ └── resources
│ ├── log4j2.xml
│ └── schema
│ ├── Invoice.json
│ └── Notification.json
├── rewards-table
├── pom.xml
├── scripts
│ ├── create-loyalty-topic.cmd
│ └── start-loyalty-consumer.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── AppConfigs.java
│ │ ├── Notifications.java
│ │ ├── PosSerdes.java
│ │ ├── RewardsApp.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ ├── DeliveryAddress.java
│ │ ├── Notification.java
│ │ ├── PosInvoice.java
│ │ └── PosLineItem.java
│ └── resources
│ ├── log4j2.xml
│ └── schema
│ ├── Invoice.json
│ └── Notification.json
├── stream-join
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-producer_pay_confirm.cmd
│ ├── start-producer_pay_request.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── StreamJoinDemo.java
│ │ ├── common
│ │ ├── AppConfigs.java
│ │ ├── AppSerdes.java
│ │ └── AppTimeExtractor.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ ├── PaymentConfirmation.java
│ │ ├── PaymentRequest.java
│ │ └── TransactionStatus.java
│ └── resources
│ ├── data
│ └── sample.txt
│ ├── log4j2.xml
│ └── schema
│ ├── PaymentConfirmation.json
│ ├── PaymentRequest.json
│ └── TransactionStatus.json
├── streaming-table
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-producer.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ └── StreamingTable.java
│ └── resources
│ └── log4j2.xml
├── streaming-word-count
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-producer.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ └── StreamingWordCount.java
│ └── resources
│ └── log4j2.xml
├── sync-producer
├── README.md
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-consumer.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ └── SynchronousHelloProducer.java
│ └── resources
│ └── log4j2.xml
├── time-check
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── AppConfigs.java
│ │ ├── InvoiceTimeExtractor.java
│ │ ├── PosSerdes.java
│ │ ├── TimeCheckDemo.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ ├── DeliveryAddress.java
│ │ ├── PosInvoice.java
│ │ └── PosLineItem.java
│ └── resources
│ ├── log4j2.xml
│ └── schema
│ └── Invoice.json
├── top3-inventories
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-producer-inventories.cmd
│ ├── start-producer_ad-clicks.cmd
│ └── start-zookeeper.cmd
└── src
│ └── main
│ ├── java
│ └── guru
│ │ └── learningjournal
│ │ └── kafka
│ │ └── examples
│ │ ├── Top3NewsTypesDemo.java
│ │ ├── common
│ │ ├── AppConfigs.java
│ │ ├── AppSerdes.java
│ │ └── Top3NewsTypes.java
│ │ ├── serde
│ │ ├── JsonDeserializer.java
│ │ └── JsonSerializer.java
│ │ └── types
│ │ ├── AdClick.java
│ │ ├── AdInventories.java
│ │ └── ClicksByNewsType.java
│ └── resources
│ ├── data
│ └── sample.txt
│ ├── log4j2.xml
│ └── schema
│ ├── AdClick.json
│ ├── AdInventories.json
│ └── ClicksByNewsType.json
├── topology-test
├── pom.xml
├── scripts
│ ├── create-topic.cmd
│ ├── start-kafka-server-0.cmd
│ ├── start-kafka-server-1.cmd
│ ├── start-kafka-server-2.cmd
│ ├── start-producer_ad-clicks.cmd
│ ├── start-producer_ad-impressions.cmd
│ └── start-zookeeper.cmd
└── src
│ ├── main
│ ├── java
│ │ └── guru
│ │ │ └── learningjournal
│ │ │ └── kafka
│ │ │ └── examples
│ │ │ ├── AppTopology.java
│ │ │ ├── CampaignPerformanceApp.java
│ │ │ ├── common
│ │ │ ├── AppConfigs.java
│ │ │ └── AppSerdes.java
│ │ │ ├── serde
│ │ │ ├── JsonDeserializer.java
│ │ │ └── JsonSerializer.java
│ │ │ └── types
│ │ │ ├── AdClick.java
│ │ │ ├── AdImpression.java
│ │ │ └── CampaignPerformance.java
│ └── resources
│ │ ├── data
│ │ └── sample.txt
│ │ ├── log4j2.xml
│ │ └── schema
│ │ ├── AdClick.json
│ │ ├── AdImpression.json
│ │ └── CampaignPerformance.json
│ └── test
│ └── java
│ └── guru
│ └── learningjournal
│ └── kafka
│ └── examples
│ ├── AppEmbeddedTest.java
│ └── AppTopologyTest.java
└── transactional-producer
├── README.md
├── pom.xml
├── scripts
├── create-topic.cmd
├── start-consumer1.cmd
├── start-consumer2.cmd
├── start-kafka-server-0.cmd
├── start-kafka-server-1.cmd
├── start-kafka-server-2.cmd
└── start-zookeeper.cmd
└── src
└── main
├── java
└── guru
│ └── learningjournal
│ └── kafka
│ └── examples
│ ├── Dispatcher.java
│ ├── JsonSerializer.java
│ ├── StockData.java
│ └── TransactionalProducer.java
└── resources
├── data
├── NSE05NOV2018BHAV.csv
└── NSE06NOV2018BHAV.csv
├── kafka.properties
├── log4j2.xml
└── schema
└── stock-data.json
/.gitignore:
--------------------------------------------------------------------------------
1 | # Leave entire .idea folder
2 | */.idea/*
3 | */*.iml
4 |
5 | # Leave kafka_logs and zookeeper_data and state store
6 | *kafka_logs*
7 | *zookeeper_data*
8 | *state-store*
9 | */logs/*
10 |
11 | # Leave target directory
12 | */target/*
13 |
--------------------------------------------------------------------------------
/Figures/Figure-11.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-11.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-11.2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-11.2.jpg
--------------------------------------------------------------------------------
/Figures/Figure-11.3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-11.3.jpg
--------------------------------------------------------------------------------
/Figures/Figure-13.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-13.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-13.2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-13.2.jpg
--------------------------------------------------------------------------------
/Figures/Figure-13.3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-13.3.jpg
--------------------------------------------------------------------------------
/Figures/Figure-13.4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-13.4.jpg
--------------------------------------------------------------------------------
/Figures/Figure-13.5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-13.5.jpg
--------------------------------------------------------------------------------
/Figures/Figure-13.6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-13.6.jpg
--------------------------------------------------------------------------------
/Figures/Figure-14.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-14.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-14.10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-14.10.jpg
--------------------------------------------------------------------------------
/Figures/Figure-14.11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-14.11.jpg
--------------------------------------------------------------------------------
/Figures/Figure-14.12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-14.12.jpg
--------------------------------------------------------------------------------
/Figures/Figure-14.13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-14.13.jpg
--------------------------------------------------------------------------------
/Figures/Figure-14.14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-14.14.jpg
--------------------------------------------------------------------------------
/Figures/Figure-14.2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-14.2.jpg
--------------------------------------------------------------------------------
/Figures/Figure-14.3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-14.3.jpg
--------------------------------------------------------------------------------
/Figures/Figure-14.4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-14.4.jpg
--------------------------------------------------------------------------------
/Figures/Figure-14.5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-14.5.jpg
--------------------------------------------------------------------------------
/Figures/Figure-14.6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-14.6.jpg
--------------------------------------------------------------------------------
/Figures/Figure-14.7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-14.7.jpg
--------------------------------------------------------------------------------
/Figures/Figure-14.8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-14.8.jpg
--------------------------------------------------------------------------------
/Figures/Figure-14.9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-14.9.jpg
--------------------------------------------------------------------------------
/Figures/Figure-15.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-15.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-15.2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-15.2.jpg
--------------------------------------------------------------------------------
/Figures/Figure-15.3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-15.3.jpg
--------------------------------------------------------------------------------
/Figures/Figure-17.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-17.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-17.2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-17.2.jpg
--------------------------------------------------------------------------------
/Figures/Figure-17.3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-17.3.jpg
--------------------------------------------------------------------------------
/Figures/Figure-17.4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-17.4.jpg
--------------------------------------------------------------------------------
/Figures/Figure-18.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-18.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-19.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-19.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-19.2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-19.2.jpg
--------------------------------------------------------------------------------
/Figures/Figure-19.3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-19.3.jpg
--------------------------------------------------------------------------------
/Figures/Figure-19.4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-19.4.jpg
--------------------------------------------------------------------------------
/Figures/Figure-19.5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-19.5.jpg
--------------------------------------------------------------------------------
/Figures/Figure-2.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-2.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-2.2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-2.2.jpg
--------------------------------------------------------------------------------
/Figures/Figure-2.3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-2.3.jpg
--------------------------------------------------------------------------------
/Figures/Figure-20.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-20.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-20.2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-20.2.jpg
--------------------------------------------------------------------------------
/Figures/Figure-3.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-3.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-3.2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-3.2.jpg
--------------------------------------------------------------------------------
/Figures/Figure-3.3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-3.3.jpg
--------------------------------------------------------------------------------
/Figures/Figure-3.4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-3.4.jpg
--------------------------------------------------------------------------------
/Figures/Figure-3.5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-3.5.jpg
--------------------------------------------------------------------------------
/Figures/Figure-3.6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-3.6.jpg
--------------------------------------------------------------------------------
/Figures/Figure-3.7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-3.7.jpg
--------------------------------------------------------------------------------
/Figures/Figure-4.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-4.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-4.2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-4.2.jpg
--------------------------------------------------------------------------------
/Figures/Figure-4.3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-4.3.jpg
--------------------------------------------------------------------------------
/Figures/Figure-4.4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-4.4.jpg
--------------------------------------------------------------------------------
/Figures/Figure-4.5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-4.5.jpg
--------------------------------------------------------------------------------
/Figures/Figure-4.6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-4.6.jpg
--------------------------------------------------------------------------------
/Figures/Figure-4.7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-4.7.jpg
--------------------------------------------------------------------------------
/Figures/Figure-5.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-5.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-6.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-6.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-6.10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-6.10.jpg
--------------------------------------------------------------------------------
/Figures/Figure-6.2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-6.2.jpg
--------------------------------------------------------------------------------
/Figures/Figure-6.3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-6.3.jpg
--------------------------------------------------------------------------------
/Figures/Figure-6.4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-6.4.jpg
--------------------------------------------------------------------------------
/Figures/Figure-6.5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-6.5.jpg
--------------------------------------------------------------------------------
/Figures/Figure-6.6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-6.6.jpg
--------------------------------------------------------------------------------
/Figures/Figure-6.7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-6.7.jpg
--------------------------------------------------------------------------------
/Figures/Figure-6.8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-6.8.jpg
--------------------------------------------------------------------------------
/Figures/Figure-6.9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-6.9.jpg
--------------------------------------------------------------------------------
/Figures/Figure-7.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-7.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-7.2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-7.2.jpg
--------------------------------------------------------------------------------
/Figures/Figure-7.3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-7.3.jpg
--------------------------------------------------------------------------------
/Figures/Figure-7.4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-7.4.jpg
--------------------------------------------------------------------------------
/Figures/Figure-7.5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-7.5.jpg
--------------------------------------------------------------------------------
/Figures/Figure-7.6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-7.6.jpg
--------------------------------------------------------------------------------
/Figures/Figure-A.1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-A.1.jpg
--------------------------------------------------------------------------------
/Figures/Figure-A.2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-A.2.jpg
--------------------------------------------------------------------------------
/Figures/Figure-A.3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-A.3.jpg
--------------------------------------------------------------------------------
/Figures/Figure-A.4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-A.4.jpg
--------------------------------------------------------------------------------
/Figures/Figure-A.5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-A.5.jpg
--------------------------------------------------------------------------------
/Figures/Figure-A.6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-A.6.jpg
--------------------------------------------------------------------------------
/Figures/Figure-A.7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LearningJournal/Kafka-Streams-Real-time-Stream-Processing/3787a27b049ebad591881cec65f62e84641228df/Figures/Figure-A.7.jpg
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Prashant Kumar Pandey
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/ad-campaigns/scripts/create-topic.cmd:
--------------------------------------------------------------------------------
1 | kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic ad-impressions & kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic ad-clicks
--------------------------------------------------------------------------------
/ad-campaigns/scripts/start-kafka-server-0.cmd:
--------------------------------------------------------------------------------
1 | kafka-server-start.bat %KAFKA_HOME%\config\server-0.properties
--------------------------------------------------------------------------------
/ad-campaigns/scripts/start-kafka-server-1.cmd:
--------------------------------------------------------------------------------
1 | kafka-server-start.bat %KAFKA_HOME%\config\server-1.properties
--------------------------------------------------------------------------------
/ad-campaigns/scripts/start-kafka-server-2.cmd:
--------------------------------------------------------------------------------
1 | kafka-server-start.bat %KAFKA_HOME%\config\server-2.properties
--------------------------------------------------------------------------------
/ad-campaigns/scripts/start-producer_ad-clicks.cmd:
--------------------------------------------------------------------------------
1 | kafka-console-producer.bat --broker-list localhost:9092 --topic ad-clicks --property parse.key=true --property key.separator=":"
--------------------------------------------------------------------------------
/ad-campaigns/scripts/start-producer_ad-impressions.cmd:
--------------------------------------------------------------------------------
1 | kafka-console-producer.bat --broker-list localhost:9092 --topic ad-impressions --property parse.key=true --property key.separator=":"
--------------------------------------------------------------------------------
/ad-campaigns/scripts/start-zookeeper.cmd:
--------------------------------------------------------------------------------
1 | zookeeper-server-start.bat %KAFKA_HOME%\config\zookeeper.properties
--------------------------------------------------------------------------------
/ad-campaigns/src/main/java/guru/learningjournal/kafka/examples/common/AppConfigs.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019. Prashant Kumar Pandey
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * You may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing,
11 | * software distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and limitations under the License.
14 | */
15 |
16 | package guru.learningjournal.kafka.examples.common;
17 |
18 | /**
19 | * Application Config
20 | *
21 | * @author prashant
22 | * @author www.learningjournal.guru
23 | */
24 |
25 | public class AppConfigs {
26 | public final static String applicationID = "AdCampaignsDemo";
27 | public final static String bootstrapServers = "localhost:9092,localhost:9093";
28 | public final static String impressionTopic = "ad-impressions";
29 | public final static String clicksTopic = "ad-clicks";
30 | public final static String stateStoreName = "logs/state-store";
31 | }
32 |
--------------------------------------------------------------------------------
/ad-campaigns/src/main/java/guru/learningjournal/kafka/examples/types/AdClick.java:
--------------------------------------------------------------------------------
1 |
2 | package guru.learningjournal.kafka.examples.types;
3 |
4 | import com.fasterxml.jackson.annotation.JsonInclude;
5 | import com.fasterxml.jackson.annotation.JsonProperty;
6 | import com.fasterxml.jackson.annotation.JsonPropertyOrder;
7 | import org.apache.commons.lang.builder.ToStringBuilder;
8 |
9 | @JsonInclude(JsonInclude.Include.NON_NULL)
10 | @JsonPropertyOrder({
11 | "ImpressionID",
12 | "Campaigner"
13 | })
14 | public class AdClick {
15 |
16 | @JsonProperty("ImpressionID")
17 | private String impressionID;
18 | @JsonProperty("Campaigner")
19 | private String campaigner;
20 |
21 | @JsonProperty("ImpressionID")
22 | public String getImpressionID() {
23 | return impressionID;
24 | }
25 |
26 | @JsonProperty("ImpressionID")
27 | public void setImpressionID(String impressionID) {
28 | this.impressionID = impressionID;
29 | }
30 |
31 | public AdClick withImpressionID(String impressionID) {
32 | this.impressionID = impressionID;
33 | return this;
34 | }
35 |
36 | @JsonProperty("Campaigner")
37 | public String getCampaigner() {
38 | return campaigner;
39 | }
40 |
41 | @JsonProperty("Campaigner")
42 | public void setCampaigner(String campaigner) {
43 | this.campaigner = campaigner;
44 | }
45 |
46 | public AdClick withCampaigner(String campaigner) {
47 | this.campaigner = campaigner;
48 | return this;
49 | }
50 |
51 | @Override
52 | public String toString() {
53 | return new ToStringBuilder(this).append("impressionID", impressionID).append("campaigner", campaigner).toString();
54 | }
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/ad-campaigns/src/main/java/guru/learningjournal/kafka/examples/types/AdImpression.java:
--------------------------------------------------------------------------------
1 |
2 | package guru.learningjournal.kafka.examples.types;
3 |
4 | import com.fasterxml.jackson.annotation.JsonInclude;
5 | import com.fasterxml.jackson.annotation.JsonProperty;
6 | import com.fasterxml.jackson.annotation.JsonPropertyOrder;
7 | import org.apache.commons.lang.builder.ToStringBuilder;
8 |
9 | @JsonInclude(JsonInclude.Include.NON_NULL)
10 | @JsonPropertyOrder({
11 | "ImpressionID",
12 | "Campaigner"
13 | })
14 | public class AdImpression {
15 |
16 | @JsonProperty("ImpressionID")
17 | private String impressionID;
18 | @JsonProperty("Campaigner")
19 | private String campaigner;
20 |
21 | @JsonProperty("ImpressionID")
22 | public String getImpressionID() {
23 | return impressionID;
24 | }
25 |
26 | @JsonProperty("ImpressionID")
27 | public void setImpressionID(String impressionID) {
28 | this.impressionID = impressionID;
29 | }
30 |
31 | public AdImpression withImpressionID(String impressionID) {
32 | this.impressionID = impressionID;
33 | return this;
34 | }
35 |
36 | @JsonProperty("Campaigner")
37 | public String getCampaigner() {
38 | return campaigner;
39 | }
40 |
41 | @JsonProperty("Campaigner")
42 | public void setCampaigner(String campaigner) {
43 | this.campaigner = campaigner;
44 | }
45 |
46 | public AdImpression withCampaigner(String campaigner) {
47 | this.campaigner = campaigner;
48 | return this;
49 | }
50 |
51 | @Override
52 | public String toString() {
53 | return new ToStringBuilder(this).append("impressionID", impressionID).append("campaigner", campaigner).toString();
54 | }
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/ad-campaigns/src/main/resources/data/sample.txt:
--------------------------------------------------------------------------------
1 | 100001:{"ImpressionID": "100001", "Campaigner": "ABC Ltd"}
2 | 100002:{"ImpressionID": "100002", "Campaigner": "XYZ Ltd"}
3 | 100003:{"ImpressionID": "100003", "Campaigner": "XYZ Ltd"}
4 | 100004:{"ImpressionID": "100004", "Campaigner": "XYZ Ltd"}
5 | 100005:{"ImpressionID": "100005", "Campaigner": "XYZ Ltd"}
6 | 100006:{"ImpressionID": "100006", "Campaigner": "ABC Ltd"}
7 | 100007:{"ImpressionID": "100007", "Campaigner": "ABC Ltd"}
8 | 100008:{"ImpressionID": "100008", "Campaigner": "ABC Ltd"}
9 | 100009:{"ImpressionID": "100009", "Campaigner": "ABC Ltd"}
10 | 100010:{"ImpressionID": "100010", "Campaigner": "ABC Ltd"}
11 |
12 | 100009:{"ImpressionID": "100009", "Campaigner": "ABC Ltd"}
13 | 100010:{"ImpressionID": "100010", "Campaigner": "ABC Ltd"}
14 | 100002:{"ImpressionID": "100002", "Campaigner": "XYZ Ltd"}
--------------------------------------------------------------------------------
/ad-campaigns/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/ad-campaigns/src/main/resources/schema/AdClick.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "javaType": "guru.learningjournal.kafka.examples.types.AdClick",
4 | "properties": {
5 | "ImpressionID": {
6 | "type": "string"
7 | },
8 | "Campaigner": {
9 | "type": "string"
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/ad-campaigns/src/main/resources/schema/AdImpression.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "javaType": "guru.learningjournal.kafka.examples.types.AdImpression",
4 | "properties": {
5 | "ImpressionID": {
6 | "type": "string"
7 | },
8 | "Campaigner": {
9 | "type": "string"
10 | }
11 | }
12 | }
--------------------------------------------------------------------------------
/ad-campaigns/src/main/resources/schema/CampaignPerformance.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "javaType": "guru.learningjournal.kafka.examples.types.CampaignPerformance",
4 | "properties": {
5 | "Campaigner": {
6 | "type": "string"
7 | },
8 | "AdImpressions": {
9 | "javaType": "java.lang.Long"
10 | },
11 | "AdClicks": {
12 | "javaType": "java.lang.Long"
13 | }
14 | }
15 | }
--------------------------------------------------------------------------------
/age-count/scripts/create-topic.cmd:
--------------------------------------------------------------------------------
1 | kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic person-age
--------------------------------------------------------------------------------
/age-count/scripts/start-kafka-server-0.cmd:
--------------------------------------------------------------------------------
1 | kafka-server-start.bat %KAFKA_HOME%\config\server-0.properties
--------------------------------------------------------------------------------
/age-count/scripts/start-kafka-server-1.cmd:
--------------------------------------------------------------------------------
1 | kafka-server-start.bat %KAFKA_HOME%\config\server-1.properties
--------------------------------------------------------------------------------
/age-count/scripts/start-kafka-server-2.cmd:
--------------------------------------------------------------------------------
1 | kafka-server-start.bat %KAFKA_HOME%\config\server-2.properties
--------------------------------------------------------------------------------
/age-count/scripts/start-producer.cmd:
--------------------------------------------------------------------------------
1 | kafka-console-producer.bat --broker-list localhost:9092 --topic person-age --property parse.key=true --property key.separator=":"
--------------------------------------------------------------------------------
/age-count/scripts/start-zookeeper.cmd:
--------------------------------------------------------------------------------
1 | zookeeper-server-start.bat %KAFKA_HOME%\config\zookeeper.properties
--------------------------------------------------------------------------------
/age-count/src/main/java/guru/learningjournal/kafka/examples/AppConfigs.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019. Prashant Kumar Pandey
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * You may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing,
11 | * software distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and limitations under the License.
14 | */
15 |
16 | package guru.learningjournal.kafka.examples;
17 |
18 | /**
19 | * Application Config
20 | *
21 | * @author prashant
22 | * @author www.learningjournal.guru
23 | */
24 | class AppConfigs {
25 |
26 | final static String applicationID = "AgeCountDemo";
27 | final static String bootstrapServers = "localhost:9092";
28 | final static String topicName = "person-age";
29 | final static String stateStoreLocation = "logs/state-store";
30 | }
31 |
--------------------------------------------------------------------------------
/age-count/src/main/resources/data/data.txt:
--------------------------------------------------------------------------------
1 | Abdul:26
2 | Prashant:41
3 | John:38
4 | Milli:26
5 |
6 | Abdul:27
--------------------------------------------------------------------------------
/age-count/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/avro-consumer/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | This directory contains Kafka Producer example.
4 |
5 | The demo application takes following Program Arguments:
6 |
7 | `nse-bhav-avro group1`
--------------------------------------------------------------------------------
/avro-consumer/scripts/start-kafka-server.cmd:
--------------------------------------------------------------------------------
1 | rem Start Kafka Server from the Confluent platform
2 | C:\Users\prashant\Downloads\confluent-5.0.1\bin\windows\kafka-server-start.bat C:\Users\prashant\Downloads\confluent-5.0.1\etc\kafka\server.properties
--------------------------------------------------------------------------------
/avro-consumer/scripts/start-schema-registry.cmd:
--------------------------------------------------------------------------------
1 | rem Start Schema registry from the Confluent platform
2 | C:\Users\prashant\Downloads\confluent-5.0.1\bin\windows\schema-registry-start.bat C:\Users\prashant\Downloads\confluent-5.0.1\etc\schema-registry\schema-registry.properties
--------------------------------------------------------------------------------
/avro-consumer/scripts/start-zookeeper.cmd:
--------------------------------------------------------------------------------
1 | rem Start Zookeeper from the Confluent platform
2 | C:\Users\prashant\Downloads\confluent-5.0.1\bin\windows\zookeeper-server-start.bat C:\Users\prashant\Downloads\confluent-5.0.1\etc\kafka\zookeeper.properties
--------------------------------------------------------------------------------
/avro-consumer/src/main/resources/kafka.properties:
--------------------------------------------------------------------------------
1 | client.id=AvroConsumer
2 | bootstrap.servers=localhost:9092
--------------------------------------------------------------------------------
/avro-consumer/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/avro-consumer/src/main/resources/schema/srock-data.avsc:
--------------------------------------------------------------------------------
1 | {"namespace": "guru.learningjournal.kafka.examples",
2 | "type": "record",
3 | "name": "StockData",
4 | "fields": [
5 | {"name": "symbol", "type": ["null", "string"]},
6 | {"name": "series", "type":["null", "string"]},
7 | {"name": "open", "type": ["null", "float"]},
8 | {"name": "high", "type": ["null", "float"]},
9 | {"name": "low", "type": ["null", "float"]},
10 | {"name": "close", "type": ["null", "float"]},
11 | {"name": "last", "type": ["null", "float"]},
12 | {"name": "previousClose", "type": ["null", "float"]},
13 | {"name": "totalTradedQty", "type": ["null", "long"]},
14 | {"name": "totalTradedVal", "type": ["null", "double"]},
15 | {"name": "tradeDate", "type": ["null", "string"]},
16 | {"name": "totalTrades", "type": ["null", "int"]},
17 | {"name": "isinCode", "type": ["null", "string"]}
18 | ]
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/avro-producer/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | This directory contains Kafka Producer example.
4 |
5 | The demo application takes following Program Arguments:
6 |
7 | `nse-bhav-avro /data/NSE05NOV2018BHAV.csv /data/NSE06NOV2018BHAV.csv`
--------------------------------------------------------------------------------
/avro-producer/scripts/create-topic.cmd:
--------------------------------------------------------------------------------
1 | rem Create topic in Confluent Kafka
2 | C:\Users\prashant\Downloads\confluent-5.0.1\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic nse-bhav-avro
--------------------------------------------------------------------------------
/avro-producer/scripts/start-consumer.cmd:
--------------------------------------------------------------------------------
1 | rem This consumer will show you some junk characters as the messages are in Avro binary format
2 | C:\Users\prashant\Downloads\confluent-5.0.1\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic nse-bhav-avro --from-beginning
--------------------------------------------------------------------------------
/avro-producer/scripts/start-kafka-server.cmd:
--------------------------------------------------------------------------------
1 | rem Start Kafka server from the Confluent platform
2 | C:\Users\prashant\Downloads\confluent-5.0.1\bin\windows\kafka-server-start.bat C:\Users\prashant\Downloads\confluent-5.0.1\etc\kafka\server.properties
--------------------------------------------------------------------------------
/avro-producer/scripts/start-schema-registry.cmd:
--------------------------------------------------------------------------------
1 | rem Start schema registry from the Confluent platform
2 | C:\Users\prashant\Downloads\confluent-5.0.1\bin\windows\schema-registry-start.bat C:\Users\prashant\Downloads\confluent-5.0.1\etc\schema-registry\schema-registry.properties
--------------------------------------------------------------------------------
/avro-producer/scripts/start-zookeeper.cmd:
--------------------------------------------------------------------------------
1 | rem Start Zookeeper from the Confluent platform
2 | C:\Users\prashant\Downloads\confluent-5.0.1\bin\windows\zookeeper-server-start.bat C:\Users\prashant\Downloads\confluent-5.0.1\etc\kafka\zookeeper.properties
--------------------------------------------------------------------------------
/avro-producer/src/main/resources/kafka.properties:
--------------------------------------------------------------------------------
1 | client.id=AvroProducer
2 | bootstrap.servers=localhost:9092,localhost:9093
--------------------------------------------------------------------------------
/avro-producer/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/avro-producer/src/main/resources/schema/srock-data.avsc:
--------------------------------------------------------------------------------
1 | {"namespace": "guru.learningjournal.kafka.examples",
2 | "type": "record",
3 | "name": "StockData",
4 | "fields": [
5 | {"name": "symbol", "type": ["null", "string"]},
6 | {"name": "series", "type":["null", "string"]},
7 | {"name": "open", "type": ["null", "float"]},
8 | {"name": "high", "type": ["null", "float"]},
9 | {"name": "low", "type": ["null", "float"]},
10 | {"name": "close", "type": ["null", "float"]},
11 | {"name": "last", "type": ["null", "float"]},
12 | {"name": "previousClose", "type": ["null", "float"]},
13 | {"name": "totalTradedQty", "type": ["null", "long"]},
14 | {"name": "totalTradedVal", "type": ["null", "double"]},
15 | {"name": "tradeDate", "type": ["null", "string"]},
16 | {"name": "totalTrades", "type": ["null", "int"]},
17 | {"name": "isinCode", "type": ["null", "string"]}
18 | ]
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/callback-producer/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | This directory contains Kafka Producer example.
4 |
5 | The demo application takes following Program Arguments:
6 |
7 | `hello-producer 10`
--------------------------------------------------------------------------------
/callback-producer/scripts/create-topic.cmd:
--------------------------------------------------------------------------------
1 | kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic hello-producer
--------------------------------------------------------------------------------
/callback-producer/scripts/start-consumer.cmd:
--------------------------------------------------------------------------------
1 | kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic hello-producer --from-beginning
--------------------------------------------------------------------------------
/callback-producer/scripts/start-kafka-server-0.cmd:
--------------------------------------------------------------------------------
1 | kafka-server-start.bat C:\Users\prashant\Downloads\kafka_2.12-2.0.0\config\server-0.properties
--------------------------------------------------------------------------------
/callback-producer/scripts/start-kafka-server-1.cmd:
--------------------------------------------------------------------------------
1 | kafka-server-start.bat C:\Users\prashant\Downloads\kafka_2.12-2.0.0\config\server-1.properties
--------------------------------------------------------------------------------
/callback-producer/scripts/start-kafka-server-2.cmd:
--------------------------------------------------------------------------------
1 | kafka-server-start.bat C:\Users\prashant\Downloads\kafka_2.12-2.0.0\config\server-2.properties
--------------------------------------------------------------------------------
/callback-producer/scripts/start-zookeeper.cmd:
--------------------------------------------------------------------------------
1 | zookeeper-server-start.bat C:\Users\prashant\Downloads\kafka_2.12-2.0.0\config\zookeeper.properties
--------------------------------------------------------------------------------
/callback-producer/src/main/resources/log4j2.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/counting-session/scripts/create-topic.cmd:
--------------------------------------------------------------------------------
1 | kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 3 --partitions 2 --topic user-clicks --config min.insync.replicas=2
--------------------------------------------------------------------------------
/counting-session/scripts/start-kafka-server-0.cmd:
--------------------------------------------------------------------------------
1 | kafka-server-start.bat %KAFKA_HOME%\config\server-0.properties
--------------------------------------------------------------------------------
/counting-session/scripts/start-kafka-server-1.cmd:
--------------------------------------------------------------------------------
1 | kafka-server-start.bat %KAFKA_HOME%\config\server-1.properties
--------------------------------------------------------------------------------
/counting-session/scripts/start-kafka-server-2.cmd:
--------------------------------------------------------------------------------
1 | kafka-server-start.bat %KAFKA_HOME%\config\server-2.properties
--------------------------------------------------------------------------------
/counting-session/scripts/start-producer.cmd:
--------------------------------------------------------------------------------
1 | kafka-console-producer.bat --broker-list localhost:9092 --topic user-clicks --property parse.key=true --property key.separator=":"
--------------------------------------------------------------------------------
/counting-session/scripts/start-zookeeper.cmd:
--------------------------------------------------------------------------------
1 | zookeeper-server-start.bat %KAFKA_HOME%\config\zookeeper.properties
--------------------------------------------------------------------------------
/counting-session/src/main/java/guru/learningjournal/kafka/examples/common/AppConfigs.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019. Prashant Kumar Pandey
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * You may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing,
11 | * software distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and limitations under the License.
14 | */
15 |
16 | package guru.learningjournal.kafka.examples.common;
17 |
18 | /**
19 | * Application Configs
20 | *
21 | * @author prashant
22 | * @author www.learningjournal.guru
23 | */
24 | public class AppConfigs {
25 |
26 | public final static String applicationID = "CountingSessionApp";
27 | public final static String bootstrapServers = "192.168.0.105:9092";
28 | public final static String posTopicName = "user-clicks";
29 | public final static String stateStoreName = "ss-user-clicks";
30 | }
--------------------------------------------------------------------------------
/counting-session/src/main/java/guru/learningjournal/kafka/examples/common/AppTimestampExtractor.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2019. Prashant Kumar Pandey
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * You may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing,
11 | * software distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and limitations under the License.
14 | */
15 |
16 | package guru.learningjournal.kafka.examples.common;
17 |
18 | import guru.learningjournal.kafka.examples.types.UserClicks;
19 | import org.apache.kafka.clients.consumer.ConsumerRecord;
20 | import org.apache.kafka.streams.processor.TimestampExtractor;
21 |
22 | /**
23 | * Custom TimestampExtractor for the Application
24 | *
25 | * @author prashant
26 | * @author www.learningjournal.guru
27 | */
28 |
29 | public class AppTimestampExtractor implements TimestampExtractor {
30 |
31 | @Override
32 | public long extract(ConsumerRecord