org.apache.kafka.streams.kstream.ValueJoiner Java Examples
The following examples show how to use
org.apache.kafka.streams.kstream.ValueJoiner.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: ScsApplication.java From spring_io_2019 with Apache License 2.0 | 7 votes |
@StreamListener @SendTo(Bindings.RATED_MOVIES) KStream<Long, RatedMovie> rateMoviesFor(@Input(Bindings.AVG_TABLE) KTable<Long, Double> ratings, @Input(Bindings.MOVIES) KTable<Long, Movie> movies) { ValueJoiner<Movie, Double, RatedMovie> joiner = (movie, rating) -> new RatedMovie(movie.getMovieId(), movie.getReleaseYear(), movie.getTitle(), rating); movies .join(ratings, joiner, Materialized .<Long, RatedMovie, KeyValueStore<Bytes, byte[]>>as(Bindings.RATED_MOVIES_STORE) .withKeySerde(Serdes.Long()) .withValueSerde(new JsonSerde<>(RatedMovie.class))); return movies.join(ratings, joiner).toStream(); }
Example #2
Source File: SchemaKStream.java From ksql-fork-with-deep-learning-function with Apache License 2.0 | 4 votes |
@SuppressWarnings("unchecked") public SchemaKStream leftJoin( final SchemaKTable schemaKTable, final Schema joinSchema, final Field joinKey, KsqlTopicSerDe joinSerDe, KsqlConfig ksqlConfig ) { KStream joinedKStream = kstream.leftJoin( schemaKTable.getKtable(), (ValueJoiner<GenericRow, GenericRow, GenericRow>) (leftGenericRow, rightGenericRow) -> { List<Object> columns = new ArrayList<>(leftGenericRow.getColumns()); if (rightGenericRow == null) { for (int i = leftGenericRow.getColumns().size(); i < joinSchema.fields().size(); i++) { columns.add(null); } } else { columns.addAll(rightGenericRow.getColumns()); } return new GenericRow(columns); }, Joined.with(Serdes.String(), joinSerDe.getGenericRowSerde(this.getSchema(), ksqlConfig, false, schemaRegistryClient ), null ) ); return new SchemaKStream( joinSchema, joinedKStream, joinKey, Arrays.asList(this, schemaKTable), Type.JOIN, functionRegistry, schemaRegistryClient ); }
Example #3
Source File: CountingWindowingAndKtableJoinExample.java From kafka-streams-in-action with Apache License 2.0 | 4 votes |
public static void main(String[] args) throws Exception { StreamsConfig streamsConfig = new StreamsConfig(getProperties()); Serde<String> stringSerde = Serdes.String(); Serde<StockTransaction> transactionSerde = StreamsSerdes.StockTransactionSerde(); Serde<TransactionSummary> transactionKeySerde = StreamsSerdes.TransactionSummarySerde(); StreamsBuilder builder = new StreamsBuilder(); long twentySeconds = 1000 * 20; long fifteenMinutes = 1000 * 60 * 15; long fiveSeconds = 1000 * 5; KTable<Windowed<TransactionSummary>, Long> customerTransactionCounts = builder.stream(STOCK_TRANSACTIONS_TOPIC, Consumed.with(stringSerde, transactionSerde).withOffsetResetPolicy(LATEST)) .groupBy((noKey, transaction) -> TransactionSummary.from(transaction), Serialized.with(transactionKeySerde, transactionSerde)) // session window comment line below and uncomment another line below for a different window example .windowedBy(SessionWindows.with(twentySeconds).until(fifteenMinutes)).count(); //The following are examples of different windows examples //Tumbling window with timeout 15 minutes //.windowedBy(TimeWindows.of(twentySeconds).until(fifteenMinutes)).count(); //Tumbling window with default timeout 24 hours //.windowedBy(TimeWindows.of(twentySeconds)).count(); //Hopping window //.windowedBy(TimeWindows.of(twentySeconds).advanceBy(fiveSeconds).until(fifteenMinutes)).count(); customerTransactionCounts.toStream().print(Printed.<Windowed<TransactionSummary>, Long>toSysOut().withLabel("Customer Transactions Counts")); KStream<String, TransactionSummary> countStream = customerTransactionCounts.toStream().map((window, count) -> { TransactionSummary transactionSummary = window.key(); String newKey = transactionSummary.getIndustry(); transactionSummary.setSummaryCount(count); return KeyValue.pair(newKey, transactionSummary); }); KTable<String, String> financialNews = builder.table( "financial-news", Consumed.with(EARLIEST)); ValueJoiner<TransactionSummary, String, String> valueJoiner = (txnct, news) -> String.format("%d shares purchased %s related news [%s]", txnct.getSummaryCount(), txnct.getStockTicker(), news); KStream<String,String> joined = countStream.leftJoin(financialNews, valueJoiner, Joined.with(stringSerde, transactionKeySerde, stringSerde)); joined.print(Printed.<String, String>toSysOut().withLabel("Transactions and News")); KafkaStreams kafkaStreams = new KafkaStreams(builder.build(), streamsConfig); kafkaStreams.cleanUp(); kafkaStreams.setUncaughtExceptionHandler((t, e) -> { LOG.error("had exception ", e); }); CustomDateGenerator dateGenerator = CustomDateGenerator.withTimestampsIncreasingBy(Duration.ofMillis(750)); DataGenerator.setTimestampGenerator(dateGenerator::get); MockDataProducer.produceStockTransactions(2, 5, 3, false); LOG.info("Starting CountingWindowing and KTableJoins Example"); kafkaStreams.cleanUp(); kafkaStreams.start(); Thread.sleep(65000); LOG.info("Shutting down the CountingWindowing and KTableJoins Example Application now"); kafkaStreams.close(); MockDataProducer.shutdown(); }
Example #4
Source File: KafkaStreamsJoinsApp.java From kafka-streams-in-action with Apache License 2.0 | 4 votes |
public static void main(String[] args) throws Exception { StreamsConfig streamsConfig = new StreamsConfig(getProperties()); StreamsBuilder builder = new StreamsBuilder(); Serde<Purchase> purchaseSerde = StreamsSerdes.PurchaseSerde(); Serde<String> stringSerde = Serdes.String(); KeyValueMapper<String, Purchase, KeyValue<String,Purchase>> custIdCCMasking = (k, v) -> { Purchase masked = Purchase.builder(v).maskCreditCard().build(); return new KeyValue<>(masked.getCustomerId(), masked); }; Predicate<String, Purchase> coffeePurchase = (key, purchase) -> purchase.getDepartment().equalsIgnoreCase("coffee"); Predicate<String, Purchase> electronicPurchase = (key, purchase) -> purchase.getDepartment().equalsIgnoreCase("electronics"); int COFFEE_PURCHASE = 0; int ELECTRONICS_PURCHASE = 1; KStream<String, Purchase> transactionStream = builder.stream( "transactions", Consumed.with(Serdes.String(), purchaseSerde)).map(custIdCCMasking); KStream<String, Purchase>[] branchesStream = transactionStream.selectKey((k,v)-> v.getCustomerId()).branch(coffeePurchase, electronicPurchase); KStream<String, Purchase> coffeeStream = branchesStream[COFFEE_PURCHASE]; KStream<String, Purchase> electronicsStream = branchesStream[ELECTRONICS_PURCHASE]; ValueJoiner<Purchase, Purchase, CorrelatedPurchase> purchaseJoiner = new PurchaseJoiner(); JoinWindows twentyMinuteWindow = JoinWindows.of(60 * 1000 * 20); KStream<String, CorrelatedPurchase> joinedKStream = coffeeStream.join(electronicsStream, purchaseJoiner, twentyMinuteWindow, Joined.with(stringSerde, purchaseSerde, purchaseSerde)); joinedKStream.print(Printed.<String, CorrelatedPurchase>toSysOut().withLabel("joined KStream")); // used only to produce data for this application, not typical usage MockDataProducer.producePurchaseData(); LOG.info("Starting Join Examples"); KafkaStreams kafkaStreams = new KafkaStreams(builder.build(), streamsConfig); kafkaStreams.start(); Thread.sleep(65000); LOG.info("Shutting down the Join Examples now"); kafkaStreams.close(); MockDataProducer.shutdown(); }