@@ -3,15 +3,18 @@ package streams.kafka
33import org.apache.commons.lang3.StringUtils
44import org.apache.kafka.clients.CommonClientConfigs
55import org.apache.kafka.clients.producer.ProducerConfig
6+ import org.apache.kafka.common.config.TopicConfig
67import org.apache.kafka.common.serialization.ByteArraySerializer
7- import org.apache.kafka.common.serialization.StringSerializer
8+ import org.neo4j.logging.Log
89import streams.extensions.getInt
910import streams.extensions.toPointCase
1011import streams.utils.JSONUtils
1112import streams.utils.ValidationUtils.validateConnection
1213import java.util.Properties
1314import java.util.concurrent.TimeUnit
1415
16+ enum class LogStrategy { delete, compact }
17+
1518private val configPrefix = " kafka."
1619
1720data class KafkaConfiguration (val zookeeperConnect : String = " localhost:2181" ,
@@ -28,6 +31,7 @@ data class KafkaConfiguration(val zookeeperConnect: String = "localhost:2181",
2831 val transactionalId : String = StringUtils .EMPTY ,
2932 val lingerMs : Int = 1 ,
3033 val topicDiscoveryPollingInterval : Long = TimeUnit .MINUTES .toMillis(5),
34+ val streamsLogCompactionStrategy : String = LogStrategy .delete.toString(),
3135 val extraProperties : Map <String , String > = emptyMap()) {
3236
3337 companion object {
@@ -55,19 +59,26 @@ data class KafkaConfiguration(val zookeeperConnect: String = "localhost:2181",
5559 lingerMs = config.getInt(" linger.ms" , default.lingerMs),
5660 topicDiscoveryPollingInterval = config.getOrDefault(" topic.discovery.polling.interval" ,
5761 default.topicDiscoveryPollingInterval).toString().toLong(),
62+ streamsLogCompactionStrategy = config.getOrDefault(" streams.log.compaction.strategy" , default.streamsLogCompactionStrategy),
5863 extraProperties = extraProperties // for what we don't provide a default configuration
5964 )
6065 }
6166
62- fun from (cfg : Map <String , String >): KafkaConfiguration {
67+ fun from (cfg : Map <String , String >, log : Log ): KafkaConfiguration {
6368 val kafkaCfg = create(cfg)
64- validate(kafkaCfg, cfg)
69+ validate(kafkaCfg, cfg, log )
6570 return kafkaCfg
6671 }
6772
68- private fun validate (config : KafkaConfiguration , rawConfig : Map <String , String >) {
73+ private fun validate (config : KafkaConfiguration , rawConfig : Map <String , String >, log : Log ? = null ) {
6974 validateConnection(config.zookeeperConnect, " zookeeper.connect" , false )
7075 validateConnection(config.bootstrapServers, CommonClientConfigs .BOOTSTRAP_SERVERS_CONFIG , false )
76+ try {
77+ LogStrategy .valueOf(config.streamsLogCompactionStrategy)
78+ } catch (e: IllegalArgumentException ) {
79+ log?.warn(" Invalid log compaction strategy setting, switching to default value ${TopicConfig .CLEANUP_POLICY_DELETE } " )
80+ config.streamsLogCompactionStrategy.apply { LogStrategy .delete.toString() }
81+ }
7182 }
7283
7384 }
0 commit comments