apache/flink · error · IOException

Unrecognized type: %s. This method is deprecated and might n

Error message

Unrecognized type: %s. This method is deprecated and might not work for all supported types.

What it means

Configuration.readFields() rehydrates a Configuration from a Java DataInput using a per-entry type tag (TYPE_STRING/INT/LONG/DOUBLE/BOOLEAN/BYTES). If the stream contains a tag outside the known set, it throws IOException 'Unrecognized type: %s...' — the serialized form is corrupt or was written by an incompatible writer, so deserialization of the config cannot proceed.

Source

Thrown at flink-core/src/main/java/org/apache/flink/configuration/Configuration.java:581

                    case TYPE_LONG:
                        value = in.readLong();
                        break;
                    case TYPE_FLOAT:
                        value = in.readFloat();
                        break;
                    case TYPE_DOUBLE:
                        value = in.readDouble();
                        break;
                    case TYPE_BOOLEAN:
                        value = in.readBoolean();
                        break;
                    case TYPE_BYTES:
                        byte[] bytes = new byte[in.readInt()];
                        in.readFully(bytes);
                        value = bytes;
                        break;
                    default:
                        throw new IOException(
                                String.format(
                                        "Unrecognized type: %s. This method is deprecated and"
                                                + " might not work for all supported types.",
                                        type));
                }

                this.confData.put(key, value);
            }
        }
    }

    @Override
    public void write(final DataOutputView out) throws IOException {
        synchronized (this.confData) {
            out.writeInt(this.confData.size());

            for (Map.Entry<String, Object> entry : this.confData.entrySet()) {
                String key = entry.getKey();

View on GitHub (pinned to 2f3c205e92)

Solutions

  1. Ensure writer and reader run the same Flink version (this legacy format has no cross-version guarantees).
  2. Verify integrity/size of the byte stream being handed to readFields before calling it.
  3. If data came from a checkpoint, select an intact checkpoint or re-create the job state.
  4. For programmatic use, prefer the modern Configuration serialization (ConfigurationUtils / flink-configuration YAML or the versioned delegate) instead of raw readFields.
Defensive patterns

Strategy: try-catch

Try / catch

try {
    conf.readFields(input);
} catch (IOException e) {
    if (e.getMessage() != null && e.getMessage().startsWith("Unrecognized type")) {
        // corrupt or version-mismatched stream: cannot recover, reject payload
    }
    throw e;
}

Prevention

When it happens

Trigger: Reading a Configuration from a data stream produced by a different serialization version or truncated/corrupted in transit (RPC frames, checkpoint metadata holding an embedded Configuration); manually constructed DataInput fed to readFields; byte-array truncation before readFields.

Common situations: Corrupted RPC payload or checkpoint metadata; mixing incompatible Flink versions between sender and receiver of an embedded Configuration; rare — internal format evolution without version handshake.

Related errors


AI-assisted analysis of apache/flink@2f3c205e92 (2026-08-14). Data as JSON: /api/errors/c1a9839028e322e9. Report an issue: GitHub.