Java Code Examples for org.apache.kafka.streams.KafkaStreams#setUncaughtExceptionHandler()
The following examples show how to use
org.apache.kafka.streams.KafkaStreams#setUncaughtExceptionHandler() .
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: KafkaStreamsStarter.java From football-events with MIT License | 6 votes |
public KafkaStreams start() { Properties props = new Properties(); props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaBootstrapAddress); props.put(StreamsConfig.CLIENT_ID_CONFIG, applicationId); props.put(StreamsConfig.NUM_STANDBY_REPLICAS_CONFIG, 0); props.put(StreamsConfig.APPLICATION_ID_CONFIG, applicationId); props.put(StreamsConfig.PROCESSING_GUARANTEE_CONFIG, "exactly_once"); props.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 1); //commit asap final KafkaStreams kafkaStreams = new KafkaStreams(topology, props); Runtime.getRuntime().addShutdownHook(new Thread(kafkaStreams::close)); kafkaStreams.setUncaughtExceptionHandler((thread, exception) -> logger.error(thread.toString(), exception)); // wait for Kafka and football topics creation to avoid endless REBALANCING problem waitForKafkaAndTopics(); startStreams(kafkaStreams); logger.debug("Started Kafka Streams, Kafka bootstrap: {}", kafkaBootstrapAddress); return kafkaStreams; }
Example 2
Source File: KafkaStreamsUtils.java From simplesource with Apache License 2.0 | 5 votes |
public static void registerExceptionHandler(final Logger logger, final KafkaStreams streams) { streams.setUncaughtExceptionHandler( (Thread t, Throwable e) -> { logger.error("Unhandled exception in " + t.getName() + ", exiting. {}", streams, e); System.exit(1); } ); }
Example 3
Source File: AggregateTopics.java From phoebus with Eclipse Public License 1.0 | 5 votes |
private KafkaStreams createStream() { KafkaStreams stream = KafkaHelper.aggregateTopics(kafka_servers, topics, longTerm); // Log any uncaught exceptions. stream.setUncaughtExceptionHandler((Thread thread, Throwable throwable) -> { logger.log(Level.WARNING, "Kafka Streams Error.", throwable); }); // Catch control-c and shutdown stream beforehand. Runtime.getRuntime().addShutdownHook(new Thread(stream::close)); return stream; }
Example 4
Source File: KafkaStreamsService.java From emodb with Apache License 2.0 | 5 votes |
@Override protected final void doStart() { _streams = new KafkaStreams(topology(), _streamsConfiguration); _streams.setUncaughtExceptionHandler((thread, throwable) -> { _uncaughtException.compareAndSet(null, throwable); _fatalErrorEncountered.set(true); _streamsExceptionMeter.mark(); _streams.close(Duration.ofMillis(1)); }); _streams.setStateListener(this); _streams.start(); notifyStarted(); }
Example 5
Source File: StockPerformanceInteractiveQueryApplication.java From kafka-streams-in-action with Apache License 2.0 | 4 votes |
public static void main(String[] args) { if(args.length < 2){ LOG.error("Need to specify host, port"); System.exit(1); } String host = args[0]; int port = Integer.parseInt(args[1]); final HostInfo hostInfo = new HostInfo(host, port); Properties properties = getProperties(); properties.put(StreamsConfig.APPLICATION_SERVER_CONFIG, host+":"+port); StreamsConfig streamsConfig = new StreamsConfig(properties); Serde<String> stringSerde = Serdes.String(); Serde<Long> longSerde = Serdes.Long(); Serde<StockTransaction> stockTransactionSerde = StreamsSerdes.StockTransactionSerde(); WindowedSerializer<String> windowedSerializer = new WindowedSerializer<>(stringSerde.serializer()); WindowedDeserializer<String> windowedDeserializer = new WindowedDeserializer<>(stringSerde.deserializer()); Serde<Windowed<String>> windowedSerde = Serdes.serdeFrom(windowedSerializer, windowedDeserializer); Serde<CustomerTransactions> customerTransactionsSerde = StreamsSerdes.CustomerTransactionsSerde(); Aggregator<String, StockTransaction, Integer> sharesAggregator = (k, v, i) -> v.getShares() + i; StreamsBuilder builder = new StreamsBuilder(); // data is already coming in keyed KStream<String, StockTransaction> stockTransactionKStream = builder.stream(MockDataProducer.STOCK_TRANSACTIONS_TOPIC, Consumed.with(stringSerde, stockTransactionSerde) .withOffsetResetPolicy(Topology.AutoOffsetReset.LATEST)); stockTransactionKStream.map((k,v) -> KeyValue.pair(v.getSector(), v)) .groupByKey(Serialized.with(stringSerde, stockTransactionSerde)) .count(Materialized.as("TransactionsBySector")) .toStream() .peek((k,v) -> LOG.info("Transaction count for {} {}", k, v)) .to("sector-transaction-counts", Produced.with(stringSerde, longSerde)); stockTransactionKStream.map((k,v) -> KeyValue.pair(v.getCustomerId(), v)) .groupByKey(Serialized.with(stringSerde, stockTransactionSerde)) .windowedBy(SessionWindows.with(TimeUnit.MINUTES.toMillis(60)).until(TimeUnit.MINUTES.toMillis(120))) .aggregate(CustomerTransactions::new,(k, v, ct) -> ct.update(v), (k, ct, other)-> ct.merge(other), Materialized.<String, CustomerTransactions, SessionStore<Bytes, byte[]>>as("CustomerPurchaseSessions") .withKeySerde(stringSerde).withValueSerde(customerTransactionsSerde)) .toStream() .peek((k,v) -> LOG.info("Session info for {} {}", k, v)) .to("session-transactions", Produced.with(windowedSerde, customerTransactionsSerde)); stockTransactionKStream.groupByKey(Serialized.with(stringSerde, stockTransactionSerde)) .windowedBy(TimeWindows.of(10000)) .aggregate(() -> 0, sharesAggregator, Materialized.<String, Integer, WindowStore<Bytes, byte[]>>as("NumberSharesPerPeriod") .withKeySerde(stringSerde) .withValueSerde(Serdes.Integer())) .toStream().peek((k,v)->LOG.info("key is {} value is {}", k, v)) .to("transaction-count", Produced.with(windowedSerde,Serdes.Integer())); KafkaStreams kafkaStreams = new KafkaStreams(builder.build(), streamsConfig); InteractiveQueryServer queryServer = new InteractiveQueryServer(kafkaStreams, hostInfo); StateRestoreHttpReporter restoreReporter = new StateRestoreHttpReporter(queryServer); queryServer.init(); kafkaStreams.setGlobalStateRestoreListener(restoreReporter); kafkaStreams.setStateListener(((newState, oldState) -> { if (newState == KafkaStreams.State.RUNNING && oldState == KafkaStreams.State.REBALANCING) { LOG.info("Setting the query server to ready"); queryServer.setReady(true); } else if (newState != KafkaStreams.State.RUNNING) { LOG.info("State not RUNNING, disabling the query server"); queryServer.setReady(false); } })); kafkaStreams.setUncaughtExceptionHandler((t, e) -> { LOG.error("Thread {} had a fatal error {}", t, e, e); shutdown(kafkaStreams, queryServer); }); Runtime.getRuntime().addShutdownHook(new Thread(() -> { shutdown(kafkaStreams, queryServer); })); LOG.info("Stock Analysis KStream Interactive Query App Started"); kafkaStreams.cleanUp(); kafkaStreams.start(); }
Example 6
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 7
Source File: CoGroupingListeningExampleApplication.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()); Deserializer<String> stringDeserializer = Serdes.String().deserializer(); Serializer<String> stringSerializer = Serdes.String().serializer(); Serde<Tuple<List<ClickEvent>, List<StockTransaction>>> eventPerformanceTuple = StreamsSerdes.EventTransactionTupleSerde(); Serializer<Tuple<List<ClickEvent>, List<StockTransaction>>> tupleSerializer = eventPerformanceTuple.serializer(); Serde<StockTransaction> stockTransactionSerde = StreamsSerdes.StockTransactionSerde(); Deserializer<StockTransaction> stockTransactionDeserializer = stockTransactionSerde.deserializer(); Serde<ClickEvent> clickEventSerde = StreamsSerdes.ClickEventSerde(); Deserializer<ClickEvent> clickEventDeserializer = clickEventSerde.deserializer(); Topology topology = new Topology(); Map<String, String> changeLogConfigs = new HashMap<>(); changeLogConfigs.put("retention.ms","120000" ); changeLogConfigs.put("cleanup.policy", "compact,delete"); KeyValueBytesStoreSupplier storeSupplier = Stores.persistentKeyValueStore(TUPLE_STORE_NAME); StoreBuilder<KeyValueStore<String, Tuple<List<ClickEvent>, List<StockTransaction>>>> builder = Stores.keyValueStoreBuilder(storeSupplier, Serdes.String(), eventPerformanceTuple); topology.addSource("Txn-Source", stringDeserializer, stockTransactionDeserializer, "stock-transactions") .addSource( "Events-Source", stringDeserializer, clickEventDeserializer, "events") .addProcessor("Txn-Processor", StockTransactionProcessor::new, "Txn-Source") .addProcessor("Events-Processor", ClickEventProcessor::new, "Events-Source") .addProcessor("CoGrouping-Processor", CogroupingProcessor::new, "Txn-Processor", "Events-Processor") .addStateStore(builder.withLoggingEnabled(changeLogConfigs), "CoGrouping-Processor") .addSink("Tuple-Sink", "cogrouped-results", stringSerializer, tupleSerializer, "CoGrouping-Processor"); topology.addProcessor("Print", new KStreamPrinter("Co-Grouping"), "CoGrouping-Processor"); MockDataProducer.produceStockTransactionsAndDayTradingClickEvents(50, 100, 100, StockTransaction::getSymbol); KafkaStreams kafkaStreams = new KafkaStreams(topology, streamsConfig); kafkaStreams.setGlobalStateRestoreListener(new LoggingStateRestoreListener()); kafkaStreams.setUncaughtExceptionHandler((thread, exception) -> LOG.error("Thread [{}] encountered [{}]", thread.getName(), exception.getMessage()) ); kafkaStreams.setStateListener((newState, oldState) -> { if (oldState == KafkaStreams.State.REBALANCING && newState== KafkaStreams.State.RUNNING) { LOG.info("Topology Layout {}", topology.describe()); LOG.info("Thread metadata {}", kafkaStreams.localThreadsMetadata()); } }); LOG.info("Co-Grouping App Started"); kafkaStreams.cleanUp(); kafkaStreams.start(); Thread.sleep(70000); LOG.info("Shutting down the Co-Grouping metrics App now"); kafkaStreams.close(); MockDataProducer.shutdown(); }
Example 8
Source File: GlobalKTableExample.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<String> stringSerde = Serdes.String(); Serde<StockTransaction> transactionSerde = StreamsSerdes.StockTransactionSerde(); Serde<TransactionSummary> transactionSummarySerde = StreamsSerdes.TransactionSummarySerde(); StreamsBuilder builder = new StreamsBuilder(); long twentySeconds = 1000 * 20; KeyValueMapper<Windowed<TransactionSummary>, Long, KeyValue<String, TransactionSummary>> transactionMapper = (window, count) -> { TransactionSummary transactionSummary = window.key(); String newKey = transactionSummary.getIndustry(); transactionSummary.setSummaryCount(count); return KeyValue.pair(newKey, transactionSummary); }; KStream<String, TransactionSummary> countStream = builder.stream( STOCK_TRANSACTIONS_TOPIC, Consumed.with(stringSerde, transactionSerde).withOffsetResetPolicy(LATEST)) .groupBy((noKey, transaction) -> TransactionSummary.from(transaction), Serialized.with(transactionSummarySerde, transactionSerde)) .windowedBy(SessionWindows.with(twentySeconds)).count() .toStream().map(transactionMapper); GlobalKTable<String, String> publicCompanies = builder.globalTable(COMPANIES.topicName()); GlobalKTable<String, String> clients = builder.globalTable(CLIENTS.topicName()); countStream.leftJoin(publicCompanies, (key, txn) -> txn.getStockTicker(),TransactionSummary::withCompanyName) .leftJoin(clients, (key, txn) -> txn.getCustomerId(), TransactionSummary::withCustomerName) .print(Printed.<String, TransactionSummary>toSysOut().withLabel("Resolved Transaction Summaries")); 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, true); LOG.info("Starting GlobalKTable Example"); kafkaStreams.cleanUp(); kafkaStreams.start(); Thread.sleep(65000); LOG.info("Shutting down the GlobalKTable Example Application now"); kafkaStreams.close(); MockDataProducer.shutdown(); }