pentaho/pentaho-kettle · error · KettleStepException
KafkaConsumerInputMeta.UnableToCreateValueType
KafkaConsumerInputMeta.UnableToCreateValueType
Error message
KafkaConsumerInputMeta.UnableToCreateValueType
What it means
KafkaConsumerInputMeta.putFieldOnRowMeta builds the output row metadata by calling ValueMetaFactory.createValueMeta for each field's configured output type; a KettlePluginException there is rethrown as KettleStepException with code KafkaConsumerInputMeta.UnableToCreateValueType. This means the plugin could not instantiate a ValueMetaInterface for the field's declared output type.
Solutions
- Verify the PDI plugins directory is intact and value-type plugins are present; reinstall/repair the PDI client.
- Align the Kafka plugin version with your PDI version (replace the plugin jar set together).
- Check the field's Output Type in the Kafka Consumer step and pick a standard type.
- Clear any plugin cache / restart Spoon so plugins reload; check the log for the originating KettlePluginException message naming the missing type.
Example fix
// before (field output type referencing unavailable custom type) field.setOutputType(Type.CUSTOM_AVRO) // after field.setOutputType(Type.STRING)
Defensive patterns
Strategy: try-catch
Try / catch
try { transMeta.getFields(rowMeta, origin, info, target, space, repository, metaStore); } catch (KettleStepException e) {
if (e.getMessage().contains("KafkaConsumerInputMeta.UnableToCreateValueType")) {
log.error("Value type plugin unavailable; check plugins dir and field output type", e);
}
throw e;
} Prevention
- Verify plugin installation integrity after PDI upgrades.
- Use standard ValueMeta types in Kafka Consumer field definitions.
- Restart the PDI client after installing/updating plugins.
When it happens
Trigger: getFields/putFieldOnRowMeta calls ValueMetaFactory.createValueMeta(name, type) and the factory throws KettlePluginException — typically because the registered ValueMeta plugin for that type code is missing/unavailable, or the type is invalid in this PDI installation.
Common situations: Incomplete PDI installation where value-type plugins aren't registered (broken plugin folder/classpath); Kafka plugin and core version mismatch; custom ValueMeta plugin removed after the transformation was configured; corrupted plugin cache.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
Related errors
- KafkaConsumerField.Type.ERROR.NoValueMetaInterfaceMapping
- API coding error: please specify the conversion metadata…
- : can't be converted to a timestamp
- ColumnExists.Exception.CouldnotFindField
- : couldn't convert string [" + string + "] to a timestamp…
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/4fd1b38cf396b4db.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/kafka/core/src/main/java/org/pentaho/big/data/kettle/plugins/kafka/KafkaConsumerInputMeta.java:403
putFieldOnRowMeta( getMessageField(), rowMeta, origin, space );
putFieldOnRowMeta( getTopicField(), rowMeta, origin, space );
putFieldOnRowMeta( getPartitionField(), rowMeta, origin, space );
putFieldOnRowMeta( getOffsetField(), rowMeta, origin, space );
putFieldOnRowMeta( getTimestampField(), rowMeta, origin, space );
return rowMeta;
}
void putFieldOnRowMeta( KafkaConsumerField field, RowMetaInterface rowMeta,
String origin, VariableSpace space ) throws KettleStepException {
if ( field != null && !Utils.isEmpty( field.getOutputName() ) ) {
try {
String value = space.environmentSubstitute( field.getOutputName() );
ValueMetaInterface v = ValueMetaFactory.createValueMeta( value,
field.getOutputType().getValueMetaInterfaceType() );
v.setOrigin( origin );
rowMeta.addValueMeta( v );
} catch ( KettlePluginException e ) {
throw new KettleStepException( BaseMessages.getString(
PKG,
"KafkaConsumerInputMeta.UnableToCreateValueType",
field
), e );
}
}
}
@Override public StepInterface getStep( StepMeta stepMeta, StepDataInterface stepDataInterface, int cnr, TransMeta tr, Trans trans ) {
return new KafkaConsumerInput( stepMeta, stepDataInterface, cnr, tr, trans );
}
@Override public StepDataInterface getStepData() {
return new KafkaConsumerInputData();
}
public void setTopics( List<String> topics ) {View on GitHub (pinned to f3058517a1)