Package com.bakdata.kafka
Class KafkaStreamsApplication
- java.lang.Object
-
- com.bakdata.kafka.KafkaApplication
-
- com.bakdata.kafka.KafkaStreamsApplication
-
- All Implemented Interfaces:
java.lang.AutoCloseable,java.lang.Runnable
public abstract class KafkaStreamsApplication extends KafkaApplication implements java.lang.AutoCloseable
The base class of the entry point of the streaming application.
This class provides common configuration options e.g.KafkaApplication.brokers,productivefor streaming application. Hereby it automatically populates the passed in command line arguments with matching environment argumentsEnvironmentArgumentsParser. To implement your streaming application inherit from this class and add your custom options. CallstartApplication(KafkaStreamsApplication, String[])with a fresh instance of your class from your main.
-
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.StringerrorTopicprotected java.util.Map<java.lang.String,java.lang.String>extraInputTopicsprotected java.util.List<java.lang.String>inputTopics-
Fields inherited from class com.bakdata.kafka.KafkaApplication
ADMIN_TIMEOUT, brokers, cleanUp, debug, extraOutputTopics, outputTopic, RESET_SLEEP_MS
-
-
Constructor Summary
Constructors Constructor Description KafkaStreamsApplication()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract voidbuildTopology(org.apache.kafka.streams.StreamsBuilder builder)protected voidcleanUpRun(CleanUpRunner cleanUpRunner)voidclose()protected voidcloseResources()Method to close resources outside ofKafkaStreams.protected java.util.PropertiescreateKafkaProperties()This method should give a default configuration to run your streaming application with.org.apache.kafka.streams.TopologycreateTopology()java.lang.StringgetErrorTopic()java.util.Map<java.lang.String,java.lang.String>getExtraInputTopics()java.lang.StringgetInputTopic()protected java.lang.StringgetInputTopic(java.lang.String role)Get extra input topic for a specified rolejava.util.List<java.lang.String>getInputTopics()protected org.apache.kafka.streams.KafkaStreams.StateListenergetStateListener()Create aKafkaStreams.StateListenerto use for Kafka Streams.org.apache.kafka.streams.KafkaStreamsgetStreams()protected java.util.Optional<org.apache.kafka.streams.errors.StreamsUncaughtExceptionHandler>getUncaughtExceptionHandler()Create anStreamsUncaughtExceptionHandlerto use for Kafka Streams.abstract java.lang.StringgetUniqueAppId()This must be set to a unique value for every application interacting with your kafka cluster to ensure internal state encapsulation.booleanisDeleteOutputTopic()booleanisProductive()voidrun()protected voidrunCleanUp()This method resets the offset for all input topics and deletes internal topics, application state, and optionally the output and error topic.protected voidrunStreamsApplication()voidsetDeleteOutputTopic(boolean deleteOutputTopic)voidsetErrorTopic(java.lang.String errorTopic)voidsetExtraInputTopics(java.util.Map<java.lang.String,java.lang.String> extraInputTopics)voidsetInputTopics(java.util.List<java.lang.String> inputTopics)voidsetProductive(boolean productive)voidsetStreams(org.apache.kafka.streams.KafkaStreams streams)protected static voidstartApplication(KafkaStreamsApplication app, java.lang.String[] args)This methods needs to be called in the executable custom application class inheriting fromKafkaStreamsApplication.java.lang.StringtoString()-
Methods inherited from class com.bakdata.kafka.KafkaApplication
createAdminClient, getBrokers, getExtraOutputTopics, getKafkaProperties, getOutputTopic, getOutputTopic, getSchemaRegistryUrl, getStreamsConfig, isCleanUp, isDebug, isHelpRequested, setBrokers, setCleanUp, setDebug, setExtraOutputTopics, setHelpRequested, setOutputTopic, setSchemaRegistryUrl, setStreamsConfig
-
-
-
-
Method Detail
-
startApplication
protected static void startApplication(KafkaStreamsApplication app, java.lang.String[] args)
This methods needs to be called in the executable custom application class inheriting from
KafkaStreamsApplication.- Parameters:
app- An instance of the custom application class.args- Arguments passed in by the custom application class.
-
run
public void run()
- Specified by:
runin interfacejava.lang.Runnable
-
close
public void close()
- Specified by:
closein interfacejava.lang.AutoCloseable
-
buildTopology
public abstract void buildTopology(org.apache.kafka.streams.StreamsBuilder builder)
-
getUniqueAppId
public abstract java.lang.String getUniqueAppId()
This must be set to a unique value for every application interacting with your kafka cluster to ensure internal state encapsulation. Could be set to: className-inputTopic-outputTopic
-
createTopology
public org.apache.kafka.streams.Topology createTopology()
-
getInputTopic
public java.lang.String getInputTopic()
-
getInputTopic
protected java.lang.String getInputTopic(java.lang.String role)
Get extra input topic for a specified role- Parameters:
role- role of input topic specified in CLI argument- Returns:
- topic name
-
getUncaughtExceptionHandler
protected java.util.Optional<org.apache.kafka.streams.errors.StreamsUncaughtExceptionHandler> getUncaughtExceptionHandler()
Create anStreamsUncaughtExceptionHandlerto use for Kafka Streams. Will not be configured ifOptional.empty()is returned.- Returns:
Optional.empty()by default.- See Also:
KafkaStreams.setUncaughtExceptionHandler(StreamsUncaughtExceptionHandler)
-
createKafkaProperties
protected java.util.Properties createKafkaProperties()
This method should give a default configuration to run your streaming application with.
To add a custom configuration please add a similar method to your custom application class:protected Properties createKafkaProperties() { # Try to always use the kafka properties from the super class as base Map Properties kafkaConfig = super.createKafkaProperties(); kafkaConfig.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, GenericAvroSerde.class); kafkaConfig.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, GenericAvroSerde.class); return kafkaConfig; }- Specified by:
createKafkaPropertiesin classKafkaApplication- Returns:
- Returns a default Kafka Streams configuration
Properties
-
runStreamsApplication
protected void runStreamsApplication()
-
closeResources
protected void closeResources()
Method to close resources outside ofKafkaStreams. Will be called by default onclose()and on transitioning toKafkaStreams.State.ERROR.
-
getStateListener
protected org.apache.kafka.streams.KafkaStreams.StateListener getStateListener()
Create aKafkaStreams.StateListenerto use for Kafka Streams. Will not be configured ifnullis returned.- Returns:
KafkaStreams.StateListenerthat callscloseResources()on transition toKafkaStreams.State.ERROR.- See Also:
KafkaStreams.setStateListener(StateListener)
-
runCleanUp
protected void runCleanUp()
This method resets the offset for all input topics and deletes internal topics, application state, and optionally the output and error topic.- Specified by:
runCleanUpin classKafkaApplication
-
cleanUpRun
protected void cleanUpRun(CleanUpRunner cleanUpRunner)
-
toString
public java.lang.String toString()
- Overrides:
toStringin classKafkaApplication
-
getInputTopics
public java.util.List<java.lang.String> getInputTopics()
-
getErrorTopic
public java.lang.String getErrorTopic()
-
getExtraInputTopics
public java.util.Map<java.lang.String,java.lang.String> getExtraInputTopics()
-
isProductive
public boolean isProductive()
-
isDeleteOutputTopic
public boolean isDeleteOutputTopic()
-
getStreams
public org.apache.kafka.streams.KafkaStreams getStreams()
-
setInputTopics
public void setInputTopics(java.util.List<java.lang.String> inputTopics)
-
setErrorTopic
public void setErrorTopic(java.lang.String errorTopic)
-
setExtraInputTopics
public void setExtraInputTopics(java.util.Map<java.lang.String,java.lang.String> extraInputTopics)
-
setProductive
public void setProductive(boolean productive)
-
setDeleteOutputTopic
public void setDeleteOutputTopic(boolean deleteOutputTopic)
-
setStreams
public void setStreams(org.apache.kafka.streams.KafkaStreams streams)
-
-