apache/pulsar · error · SerializationException
Failed at fetching schema info for <SchemaUtils.getStringSch
Error message
Failed at fetching schema info for <SchemaUtils.getStringSchemaVersion(schemaVersion)>
What it means
getSchemaInfoByVersion wraps ExecutionException from the async schema lookup and rethrows it as SerializationException 'Failed at fetching schema info for <version>' with the original cause. This means the schema info provider failed to return the schema for that version (broker error, missing schema, permission issue).
Source
Thrown at pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/reader/AbstractMultiVersionReader.java:130
* @param schemaVersion the provided schema version
* @return the schema reader for decoding messages encoded by the provided schema version.
*/
protected abstract SchemaReader<T> loadReader(BytesSchemaVersion schemaVersion);
/**
* TODO: think about how to make this async.
*/
protected SchemaInfo getSchemaInfoByVersion(byte[] schemaVersion) {
try {
return schemaInfoProvider.getSchemaByVersion(schemaVersion).get();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new SerializationException(
"Interrupted at fetching schema info for " + SchemaUtils.getStringSchemaVersion(schemaVersion),
e
);
} catch (ExecutionException e) {
throw new SerializationException(
"Failed at fetching schema info for " + SchemaUtils.getStringSchemaVersion(schemaVersion),
e.getCause()
);
}
}
}
View on GitHub (pinned to 820761864e)
Solutions
- Look at e.getCause() in the SerializationException for the real broker/registry error
- Verify the schema version exists: pulsar-admin schemas get <topic>
- Re-upload the missing schema or configure a reader schema compatible with old messages
- Check client permissions for schema read operations on the topic
- Ensure broker connectivity and retry after transient failures
Example fix
// before
SchemaInfo info = reader.getSchemaInfoByVersion(version); // SerializationException
// after
try {
SchemaInfo info = reader.getSchemaInfoByVersion(version);
} catch (SerializationException e) {
LOGGER.warn("Schema fetch failed for version " + version, e.getCause());
// re-upload schema or attach compatible reader schema
} Defensive patterns
Strategy: try-catch
Validate before calling
// verify version exists before decode: // pulsar-admin schemas get <topic> / broker HTTP GET /admin/v2/schemas/<topic>/versions/<id>
Type guard
null
Try / catch
try {
SchemaInfo info = reader.getSchemaInfoByVersion(version);
} catch (SerializationException e) {
Throwable cause = e.getCause();
log.error("Schema fetch failed for version {} cause {}", version, cause);
// re-upload schema or use compatible reader schema, then retry
} Prevention
- Inspect e.getCause() — the real registry/broker error is preserved there
- Retain all schema versions on topics with long retention consumers
- Grant clients schema read permissions on the topic
- Add monitoring/alerting on schema-not-found errors from the broker
When it happens
Trigger: Calling getSchemaInfoByVersion/read when the CompletableFuture from schemaInfoProvider.getSchemaByVersion completes exceptionally — HTTP 404 for missing schema version, broker errors, auth failures.
Common situations: Consuming messages whose schema version was deleted from the topic; broker schema registry unavailable; client lacks schema read permission; schema version bytes corrupted; topic recreated without the old schema.
Related errors
- Can't get generic schema for topic <schemaInfoProvider.getTo
- Can not enable for all producers but denies for replicators,
- Failed to add schema to an active topic with empty(BYTES) sc
- External schema is not compatible with the other schema type
- Only allowed to set schemaInfoForReplicator for a replicated
AI-assisted analysis of apache/pulsar@820761864e (2026-09-06).
Data as JSON: /api/errors/8313ee4634467fd6.
Report an issue: GitHub.