xai-org/x-algorithm · error · ConfigFailure
invalid seekStrage ${config.seekStrategy}
Error message
invalid seekStrage ${config.seekStrategy} What it means
ConfigFailure thrown when constructing the botmaker KafkaConsumer because config.seekStrategy is not one of BEGINNING, RESUME, REWIND, END. The value is matched literally (case-sensitive) before building the Finatra KafkaConsumerConfig.
Source
Thrown at botmaker/botmaker_eventbus/src/main/scala/com/twitter/botmaker/runtime/KafkaConsumer.scala:38
abstract class KafkaConsumerRegistry(val config: KafkaConsumerConfig)
extends ServiceRegistry[KafkaConsumerConfig] {
override val name: String = config.eventType
}
trait KafkaConsumerFactory extends TwitterRuntime with EventProcessor with KafkaSerdes {
def build(config: KafkaConsumerConfig, scoped: StatsReceiver): KafkaConsumerRegistry = {
val keyDeser = getKeyDeserializer(config.keyType)
val valueDeser = getValueDeserializer(config.valueThriftClass)
val seekStrage = config.seekStrategy match {
case "BEGINNING" => SeekStrategy.BEGINNING
case "RESUME" => SeekStrategy.RESUME
case "REWIND" => SeekStrategy.REWIND
case "END" => SeekStrategy.END
case _ => throw ConfigFailure(s"invalid seekStrage ${config.seekStrategy}")
}
val kafkaConsumerConfig = com.twitter.finatra.kafka.consumers
.KafkaConsumerConfig()
.fromConfigMap(
TwitterKafkaConsumerConfig().configMap ++
config.configMap.asScala.toMap ++
TwitterKafkaUtil.k8sTlsConfigOverrides(config.dest, enableTlsAndKerberos()))
val finagleKafkaConsumerConfig = FinagleKafkaConsumerConfig[AnyRef, AnyRef](kafkaConsumerConfig)
var builder = FinagleKafkaConsumerBuilder[AnyRef, AnyRef](finagleKafkaConsumerConfig)
.dest(TwitterKafkaUtil.normalizeDest(config.dest, enableTlsAndKerberos()))
.keyDeserializer(keyDeser)
.valueDeserializer(valueDeser)
.groupId(KafkaGroupId(config.groupId))
.seekStrategy(seekStrage)
.includeNodeMetrics(config.includeNodeMetrics)
.clientId(config.clientId)View on GitHub (pinned to 24c60942c5)
Solutions
- Set seekStrategy to exactly one of BEGINNING, RESUME, REWIND, END (uppercase)
- Check for trailing whitespace/typos in the config value
- Map auto.offset.reset semantics: earliest->BEGINNING, latest->END
Example fix
# before seek_strategy: beginning # after seek_strategy: BEGINNING
Defensive patterns
Strategy: validation
Validate before calling
val allowed = Set("BEGINNING","RESUME","REWIND","END")
require(allowed(config.seekStrategy), s"seekStrategy must be one of $allowed") Try / catch
catch { case e: ConfigFailure => fail fast at startup with the allowed values listed } Prevention
- Uppercase and trim the value before validation
- Lint config enums against the allowed set in CI
When it happens
Trigger: Setting seek_strategy to an unsupported or misspelled value — e.g. "beginning" (lowercase), "LATEST", "FROM_START", or leaving a typo like "RESUME " with whitespace.
Common situations: Copying example YAML with different casing; migrating configs from another Kafka client that uses different offset-reset semantics names (auto.offset.reset earliest/latest).
Related errors
- The value class ${config.valueThriftClass}, is not supported
- `clusters` must contain at least one region
- Region {region!r} must list at least one broker
- `clusters` must contain at least one region
- acks must be 0, 1, or 'all', got {self.acks!r}
AI-assisted analysis of xai-org/x-algorithm@24c60942c5 (2026-08-28).
Data as JSON: /api/errors/2dde8313809e7132.
Report an issue: GitHub.