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

  1. Verify the PDI plugins directory is intact and value-type plugins are present; reinstall/repair the PDI client.
  2. Align the Kafka plugin version with your PDI version (replace the plugin jar set together).
  3. Check the field's Output Type in the Kafka Consumer step and pick a standard type.
  4. 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

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


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)