provectus/kafka-ui · error · ValidationException
serde is not configured
Error message
${name} serde is not configured What it means
Built-in serdes can auto-configure from cluster properties; if the serde entry supplies neither explicit properties nor supports auto-configuration, createSerdeWithBuiltInSerdeName throws ValidationException('<name> serde is not configured') because the serde cannot be initialized without settings.
Solutions
- Provide the required properties for the serde under kafka.clusters.<n>.serde.<i>.properties (e.g. schema registry URL)
- Add the corresponding cluster-level settings the serde's auto-configuration looks for
- Remove the serde entry if it is not needed for that cluster
Example fix
// before
serde:
- name: avro-schema-registry # no properties, no registry config
// after
serde:
- name: avro-schema-registry
properties:
schema.registry.url: http://schema-registry:8081 Defensive patterns
Strategy: validation
Validate before calling
if (isBuiltInSerdeName(name)
&& (cfg.getProperties() == null || cfg.getProperties().isEmpty())
&& !builtinSupportsAutoConfigure(name))
throw new IllegalArgumentException(name + " serde requires explicit properties"); Try / catch
try {
serde = createSerdeFromConfig(cfg, ...);
} catch (ValidationException e) {
log.error("Serde {} unconfigured: {}", cfg.getName(), e.getMessage());
throw e;
} Prevention
- Provide required properties (e.g. schema registry URL) when enabling built-in serdes
- Check serde docs for auto-configuration requirements per cluster
- Fail fast in a config smoke test before startup
When it happens
Trigger: Adding a built-in serde (e.g. avro-schema-registry, protobuf) with no properties while the cluster config lacks the values its auto-configuration requires (e.g. schema registry URL).
Common situations: Enabling protobuf serde without schema-registry settings in the cluster config; auto-configure returning false because required cluster properties are absent.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- className can't be set for built-in serde
- filePath can't be set for built-in serde types
- filePath can't be set for built-in serde type
- 'name' property not set for serde
- Multiple serdes with same name
AI-assisted analysis of provectus/kafka-ui@83b5a60cc0 (2026-09-08).
Data as JSON: /api/errors/b6b43d821ec25804.
Report an issue: GitHub.
Appendix: source
Thrown at kafka-ui-api/src/main/java/com/provectus/kafka/ui/serdes/SerdesInitializer.java:206
}
private SerdeInstance createSerdeWithBuiltInSerdeName(SerdeConfig serdeConfig,
PropertyResolver serdeProps,
PropertyResolver clusterProps,
PropertyResolver globalProps) {
String name = serdeConfig.getName();
if (serdeConfig.getClassName() != null) {
throw new ValidationException("className can't be set for built-in serde");
}
if (serdeConfig.getFilePath() != null) {
throw new ValidationException("filePath can't be set for built-in serde types");
}
var clazz = builtInSerdeClasses.get(name);
BuiltInSerde serde = createSerdeInstance(clazz);
if (serdeConfig.getProperties() == null || serdeConfig.getProperties().isEmpty()) {
if (!autoConfigureSerde(serde, clusterProps, globalProps)) {
// no properties provided and serde does not support auto-configuration
throw new ValidationException(name + " serde is not configured");
}
} else {
// configuring serde with explicitly set properties
serde.configure(serdeProps, clusterProps, globalProps);
}
return new SerdeInstance(
name,
serde,
nullablePattern(serdeConfig.getTopicKeysPattern()),
nullablePattern(serdeConfig.getTopicValuesPattern()),
null
);
}
private boolean autoConfigureSerde(BuiltInSerde serde, PropertyResolver clusterProps, PropertyResolver globalProps) {
if (serde.canBeAutoConfigured(clusterProps, globalProps)) {
serde.autoConfigure(clusterProps, globalProps);
return true;View on GitHub (pinned to 83b5a60cc0)