Search in sources :

Example 11 with Order

use of io.confluent.examples.streams.avro.microservices.Order in project kafka-streams-examples by confluentinc.

the class EmailService method processStreams.

private KafkaStreams processStreams(final String bootstrapServers, final String stateDir) {
    KStreamBuilder builder = new KStreamBuilder();
    // Create the streams/tables for the join
    KStream<String, Order> orders = builder.stream(ORDERS.keySerde(), ORDERS.valueSerde(), ORDERS.name());
    KStream<String, Payment> payments = builder.stream(PAYMENTS.keySerde(), PAYMENTS.valueSerde(), PAYMENTS.name());
    GlobalKTable<Long, Customer> customers = builder.globalTable(CUSTOMERS.keySerde(), CUSTOMERS.valueSerde(), CUSTOMERS.name());
    // Rekey payments to be by OrderId for the windowed join
    payments = payments.selectKey((s, payment) -> payment.getOrderId());
    // Join the two streams and the table then send an email for each
    orders.join(payments, EmailTuple::new, // Join Orders and Payments streams
    JoinWindows.of(1 * MIN), serdes).join(customers, (key1, tuple) -> tuple.order.getCustomerId(), // note how, because we use a GKtable, we can join on any attribute of the Customer.
    (tuple, customer) -> tuple.setCustomer(customer)).peek((key, emailTuple) -> emailer.sendEmail(emailTuple));
    return new KafkaStreams(builder, baseStreamsConfig(bootstrapServers, stateDir, APP_ID));
}
Also used : KStreamBuilder(org.apache.kafka.streams.kstream.KStreamBuilder) Order(io.confluent.examples.streams.avro.microservices.Order) Payment(io.confluent.examples.streams.avro.microservices.Payment) MIN(io.confluent.examples.streams.microservices.util.MicroserviceUtils.MIN) Logger(org.slf4j.Logger) KStreamBuilder(org.apache.kafka.streams.kstream.KStreamBuilder) LoggerFactory(org.slf4j.LoggerFactory) CUSTOMERS(io.confluent.examples.streams.microservices.domain.Schemas.Topics.CUSTOMERS) ORDERS(io.confluent.examples.streams.microservices.domain.Schemas.Topics.ORDERS) KStream(org.apache.kafka.streams.kstream.KStream) Joined(org.apache.kafka.streams.kstream.Joined) Customer(io.confluent.examples.streams.avro.microservices.Customer) MicroserviceUtils.addShutdownHookAndBlock(io.confluent.examples.streams.microservices.util.MicroserviceUtils.addShutdownHookAndBlock) JoinWindows(org.apache.kafka.streams.kstream.JoinWindows) GlobalKTable(org.apache.kafka.streams.kstream.GlobalKTable) MicroserviceUtils.baseStreamsConfig(io.confluent.examples.streams.microservices.util.MicroserviceUtils.baseStreamsConfig) PAYMENTS(io.confluent.examples.streams.microservices.domain.Schemas.Topics.PAYMENTS) KafkaStreams(org.apache.kafka.streams.KafkaStreams) Order(io.confluent.examples.streams.avro.microservices.Order) MicroserviceUtils.parseArgsAndConfigure(io.confluent.examples.streams.microservices.util.MicroserviceUtils.parseArgsAndConfigure) Payment(io.confluent.examples.streams.avro.microservices.Payment) KafkaStreams(org.apache.kafka.streams.KafkaStreams) Customer(io.confluent.examples.streams.avro.microservices.Customer)

Aggregations

Order (io.confluent.examples.streams.avro.microservices.Order)11 OrderValidation (io.confluent.examples.streams.avro.microservices.OrderValidation)5 MicroserviceUtils.addShutdownHookAndBlock (io.confluent.examples.streams.microservices.util.MicroserviceUtils.addShutdownHookAndBlock)4 MicroserviceUtils.parseArgsAndConfigure (io.confluent.examples.streams.microservices.util.MicroserviceUtils.parseArgsAndConfigure)4 KafkaStreams (org.apache.kafka.streams.KafkaStreams)4 KStream (org.apache.kafka.streams.kstream.KStream)4 Logger (org.slf4j.Logger)4 LoggerFactory (org.slf4j.LoggerFactory)4 OrderState (io.confluent.examples.streams.avro.microservices.OrderState)3 FAIL (io.confluent.examples.streams.avro.microservices.OrderValidationResult.FAIL)3 PASS (io.confluent.examples.streams.avro.microservices.OrderValidationResult.PASS)3 Schemas (io.confluent.examples.streams.microservices.domain.Schemas)3 Topics (io.confluent.examples.streams.microservices.domain.Schemas.Topics)3 ORDERS (io.confluent.examples.streams.microservices.domain.Schemas.Topics.ORDERS)3 MicroserviceUtils.baseStreamsConfig (io.confluent.examples.streams.microservices.util.MicroserviceUtils.baseStreamsConfig)3 Joined (org.apache.kafka.streams.kstream.Joined)3 Test (org.junit.Test)3 Customer (io.confluent.examples.streams.avro.microservices.Customer)2 CREATED (io.confluent.examples.streams.avro.microservices.OrderState.CREATED)2 VALIDATED (io.confluent.examples.streams.avro.microservices.OrderState.VALIDATED)2