org.apache.kafka.streams.kstream.ForeachAction Java Examples
The following examples show how to use
org.apache.kafka.streams.kstream.ForeachAction.
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: StreamsRegistryConfiguration.java From apicurio-registry with Apache License 2.0 | 5 votes |
@Produces @Singleton public KafkaStreams storageStreams( StreamsProperties properties, ForeachAction<? super String, ? super Str.Data> dataDispatcher, ArtifactTypeUtilProviderFactory factory ) { Topology topology = new StreamsTopologyProvider(properties, dataDispatcher, factory).get(); KafkaStreams streams = new KafkaStreams(topology, properties.getProperties()); streams.setGlobalStateRestoreListener(new LoggingStateRestoreListener()); return streams; }
Example #2
Source File: StreamsTopologyProvider.java From apicurio-registry with Apache License 2.0 | 5 votes |
public StreamsTopologyProvider( StreamsProperties properties, ForeachAction<? super String, ? super Str.Data> dataDispatcher, ArtifactTypeUtilProviderFactory factory ) { this.properties = properties; this.dataDispatcher = dataDispatcher; this.factory = factory; }
Example #3
Source File: StreamsTopologyProvider.java From apicurio-registry with Apache License 2.0 | 5 votes |
public StorageTransformer( StreamsProperties properties, ForeachAction<? super String, ? super Str.Data> dispatcher, ArtifactTypeUtilProviderFactory factory ) { this.properties = properties; this.dispatcher = dispatcher; this.factory = factory; }
Example #4
Source File: ForeachActionDispatcher.java From apicurio-registry with Apache License 2.0 | 4 votes |
@Override public void apply(K key, V value) { for (ForeachAction<? super K, ? super V> action : actions) { action.apply(key, value); } }
Example #5
Source File: ForeachActionDispatcher.java From apicurio-registry with Apache License 2.0 | 4 votes |
public void register(ForeachAction<? super K, ? super V> action) { actions.add(Objects.requireNonNull(action)); }
Example #6
Source File: ForeachActionDispatcher.java From apicurio-registry with Apache License 2.0 | 4 votes |
public void deregister(ForeachAction<? super K, ? super V> action) { actions.remove(Objects.requireNonNull(action)); }
Example #7
Source File: KafkaStreamsTracing.java From brave with Apache License 2.0 | 3 votes |
/** * Create a foreach processor, similar to {@link KStream#foreach(ForeachAction)}, where its action * will be recorded in a new span with the indicated name. * * <p>Simple example using Kafka Streams DSL: * <pre>{@code * StreamsBuilder builder = new StreamsBuilder(); * builder.stream(inputTopic) * .process(kafkaStreamsTracing.foreach("myForeach", (k, v) -> ...); * }</pre> */ public <K, V> ProcessorSupplier<K, V> foreach(String spanName, ForeachAction<K, V> action) { return new TracingProcessorSupplier<>(this, spanName, () -> new AbstractProcessor<K, V>() { @Override public void process(K key, V value) { action.apply(key, value); } }); }
Example #8
Source File: KafkaStreamsTracing.java From brave with Apache License 2.0 | 3 votes |
/** * Create a peek transformer, similar to {@link KStream#peek(ForeachAction)}, where its action * will be recorded in a new span with the indicated name. * * <p>Simple example using Kafka Streams DSL: * <pre>{@code * StreamsBuilder builder = new StreamsBuilder(); * builder.stream(inputTopic) * .transformValues(kafkaStreamsTracing.peek("myPeek", (k, v) -> ...) * .to(outputTopic); * }</pre> */ public <K, V> ValueTransformerWithKeySupplier<K, V, V> peek(String spanName, ForeachAction<K, V> action) { return new TracingValueTransformerWithKeySupplier<>(this, spanName, () -> new AbstractTracingValueTransformerWithKey<K, V, V>() { @Override public V transform(K key, V value) { action.apply(key, value); return value; } }); }
Example #9
Source File: ZMartKafkaStreamsAdvancedReqsApp.java From kafka-streams-in-action with Apache License 2.0 | 2 votes |
public static void main(String[] args) throws Exception { StreamsConfig streamsConfig = new StreamsConfig(getProperties()); Serde<Purchase> purchaseSerde = StreamsSerdes.PurchaseSerde(); Serde<PurchasePattern> purchasePatternSerde = StreamsSerdes.PurchasePatternSerde(); Serde<RewardAccumulator> rewardAccumulatorSerde = StreamsSerdes.RewardAccumulatorSerde(); Serde<String> stringSerde = Serdes.String(); StreamsBuilder builder = new StreamsBuilder(); // previous requirements KStream<String,Purchase> purchaseKStream = builder.stream( "transactions", Consumed.with(stringSerde, purchaseSerde)) .mapValues(p -> Purchase.builder(p).maskCreditCard().build()); KStream<String, PurchasePattern> patternKStream = purchaseKStream.mapValues(purchase -> PurchasePattern.builder(purchase).build()); patternKStream.print( Printed.<String, PurchasePattern>toSysOut().withLabel("patterns")); patternKStream.to("patterns", Produced.with(stringSerde,purchasePatternSerde)); KStream<String, RewardAccumulator> rewardsKStream = purchaseKStream.mapValues(purchase -> RewardAccumulator.builder(purchase).build()); rewardsKStream.print(Printed.<String, RewardAccumulator>toSysOut().withLabel("rewards")); rewardsKStream.to("rewards", Produced.with(stringSerde,rewardAccumulatorSerde)); // selecting a key for storage and filtering out low dollar purchases KeyValueMapper<String, Purchase, Long> purchaseDateAsKey = (key, purchase) -> purchase.getPurchaseDate().getTime(); KStream<Long, Purchase> filteredKStream = purchaseKStream.filter((key, purchase) -> purchase.getPrice() > 5.00).selectKey(purchaseDateAsKey); filteredKStream.print(Printed.<Long, Purchase>toSysOut().withLabel("purchases")); filteredKStream.to("purchases", Produced.with(Serdes.Long(),purchaseSerde)); // branching stream for separating out purchases in new departments to their own topics Predicate<String, Purchase> isCoffee = (key, purchase) -> purchase.getDepartment().equalsIgnoreCase("coffee"); Predicate<String, Purchase> isElectronics = (key, purchase) -> purchase.getDepartment().equalsIgnoreCase("electronics"); int coffee = 0; int electronics = 1; KStream<String, Purchase>[] kstreamByDept = purchaseKStream.branch(isCoffee, isElectronics); kstreamByDept[coffee].to( "coffee", Produced.with(stringSerde, purchaseSerde)); kstreamByDept[coffee].print(Printed.<String, Purchase>toSysOut().withLabel( "coffee")); kstreamByDept[electronics].to("electronics", Produced.with(stringSerde, purchaseSerde)); kstreamByDept[electronics].print(Printed.<String, Purchase>toSysOut().withLabel("electronics")); // security Requirements to record transactions for certain employee ForeachAction<String, Purchase> purchaseForeachAction = (key, purchase) -> SecurityDBService.saveRecord(purchase.getPurchaseDate(), purchase.getEmployeeId(), purchase.getItemPurchased()); purchaseKStream.filter((key, purchase) -> purchase.getEmployeeId().equals("000000")).foreach(purchaseForeachAction); // used only to produce data for this application, not typical usage MockDataProducer.producePurchaseData(); KafkaStreams kafkaStreams = new KafkaStreams(builder.build(),streamsConfig); LOG.info("ZMart Advanced Requirements Kafka Streams Application Started"); kafkaStreams.start(); Thread.sleep(65000); LOG.info("Shutting down the Kafka Streams Application now"); kafkaStreams.close(); MockDataProducer.shutdown(); }
Example #10
Source File: ZMartKafkaStreamsAdvancedReqsMetricsApp.java From kafka-streams-in-action with Apache License 2.0 | 2 votes |
public static void main(String[] args) throws Exception { StreamsConfig streamsConfig = new StreamsConfig(getProperties()); Serde<Purchase> purchaseSerde = StreamsSerdes.PurchaseSerde(); Serde<PurchasePattern> purchasePatternSerde = StreamsSerdes.PurchasePatternSerde(); Serde<RewardAccumulator> rewardAccumulatorSerde = StreamsSerdes.RewardAccumulatorSerde(); Serde<String> stringSerde = Serdes.String(); StreamsBuilder streamsBuilder = new StreamsBuilder(); /** * Previous requirements */ KStream<String,Purchase> purchaseKStream = streamsBuilder.stream("transactions", Consumed.with(stringSerde, purchaseSerde)) .mapValues(p -> Purchase.builder(p).maskCreditCard().build()); KStream<String, PurchasePattern> patternKStream = purchaseKStream.mapValues(purchase -> PurchasePattern.builder(purchase).build()); patternKStream.to("patterns", Produced.with(stringSerde,purchasePatternSerde)); KStream<String, RewardAccumulator> rewardsKStream = purchaseKStream.mapValues(purchase -> RewardAccumulator.builder(purchase).build()); rewardsKStream.to("rewards", Produced.with(stringSerde,rewardAccumulatorSerde)); /** * Selecting a key for storage and filtering out low dollar purchases */ KeyValueMapper<String, Purchase, Long> purchaseDateAsKey = (key, purchase) -> purchase.getPurchaseDate().getTime(); KStream<Long, Purchase> filteredKStream = purchaseKStream.filter((key, purchase) -> purchase.getPrice() > 5.00).selectKey(purchaseDateAsKey); filteredKStream.to("purchases", Produced.with(Serdes.Long(),purchaseSerde)); /** * Branching stream for separating out purchases in new departments to their own topics */ Predicate<String, Purchase> isCoffee = (key, purchase) -> purchase.getDepartment().equalsIgnoreCase("coffee"); Predicate<String, Purchase> isElectronics = (key, purchase) -> purchase.getDepartment().equalsIgnoreCase("electronics"); int coffee = 0; int electronics = 1; KStream<String, Purchase>[] kstreamByDept = purchaseKStream.branch(isCoffee, isElectronics); kstreamByDept[coffee].to("coffee", Produced.with(stringSerde, purchaseSerde)); kstreamByDept[electronics].to("electronics", Produced.with(stringSerde, purchaseSerde)); /** * Security Requirements to record transactions for certain employee */ ForeachAction<String, Purchase> purchaseForeachAction = (key, purchase) -> { }; purchaseKStream.filter((key, purchase) -> purchase.getEmployeeId().equals("000000")).foreach(purchaseForeachAction); Topology topology = streamsBuilder.build(); KafkaStreams kafkaStreams = new KafkaStreams(topology, streamsConfig); KafkaStreams.StateListener stateListener = (newState, oldState) -> { if (newState == KafkaStreams.State.RUNNING && oldState == KafkaStreams.State.REBALANCING) { LOG.info("Application has gone from REBALANCING to RUNNING "); LOG.info("Topology Layout {}", streamsBuilder.build().describe()); } if (newState == KafkaStreams.State.REBALANCING) { LOG.info("Application is entering REBALANCING phase"); } }; kafkaStreams.setStateListener(stateListener); LOG.info("ZMart Advanced Requirements Metrics Application Started"); kafkaStreams.cleanUp(); CountDownLatch stopSignal = new CountDownLatch(1); Runtime.getRuntime().addShutdownHook(new Thread(()-> { LOG.info("Shutting down the Kafka Streams Application now"); kafkaStreams.close(); MockDataProducer.shutdown(); stopSignal.countDown(); })); MockDataProducer.producePurchaseData(DataGenerator.DEFAULT_NUM_PURCHASES, 250, DataGenerator.NUMBER_UNIQUE_CUSTOMERS); kafkaStreams.start(); stopSignal.await(); LOG.info("All done now, good-bye"); }