apache/seatunnel · warning
Failed to resolve schemaChangeEvent, just skip.
Error message
Failed to resolve schemaChangeEvent, just skip.
What it means
When a Debezium change record carries a schema change event (DDL), the CDC connector asks a resolver to translate it into a SeaTunnel schema change. If the resolver throws any generic exception (not a SchemaEvolutionException), the connector logs this warning and silently skips the event instead of failing the pipeline, keeping behavior backward-compatible. A SchemaEvolutionException is rethrown to fail fast because continuing would make the produced row schema diverge from the source relation.
Source
Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-base/src/main/java/org/apache/seatunnel/connectors/cdc/debezium/row/SeaTunnelRowDebeziumDeserializeSchema.java:143
}
log.debug("Unsupported record {}, just skip.", record);
}
private void deserializeSchemaChangeRecord(
SourceRecord record, Collector<SeaTunnelRow> collector) {
SchemaChangeEvent schemaChangeEvent = null;
try {
if (schemaChangeResolver != null) {
schemaChangeEvent = schemaChangeResolver.resolve(record, tables);
}
} catch (SchemaEvolutionException e) {
// A resolver uses SchemaEvolutionException only when continuing would make the
// produced row schema diverge from the source relation. Keep generic parser failures
// backward-compatible, but fail fast for an explicitly classified schema error.
throw e;
} catch (Exception e) {
log.warn("Failed to resolve schemaChangeEvent, just skip.", e);
return;
}
if (schemaChangeEvent == null) {
log.warn("Unsupported resolve schemaChangeEvent {}, just skip.", record);
return;
}
// Filter before updating the produced schema, so the produced row shape stays in lockstep
// with the (filtered) sink schema. Only surviving events are applied below.
if (schemaChangeEventFilter != null) {
schemaChangeEvent = schemaChangeEventFilter.filter(schemaChangeEvent);
}
if (schemaChangeEvent == null) {
log.debug(
"Schema change event is fully filtered out by schema-changes.include/exclude, not applied to schema and not sent downstream.");
return;
}
View on GitHub (pinned to cf67b549a7)
Solutions
- Read the exception stack trace attached to this warning to find the actual resolver failure (unsupported type, parse error).
- Upgrade the SeaTunnel CDC connector to a version whose schema resolver supports your DDL/data type.
- If the skipped schema change matters downstream, apply the schema change to the sink manually and restart the pipeline so a fresh snapshot picks up the new schema.
- If silent divergence is unacceptable, extend the deserializer to classify such errors as SchemaEvolutionException so the job fails fast instead of skipping.
- Re-run the job from an earlier checkpoint/snapshot so the affected records are re-read with the correct schema.
Example fix
// before: generic failures are silently skipped, sink schema may drift
log.warn("Failed to resolve schemaChangeEvent, just skip.", e);
// after: only skip generic parser failures, fail fast on classified schema errors
} catch (SchemaEvolutionException e) {
throw e;
} catch (Exception e) {
log.warn("Failed to resolve schemaChangeEvent, just skip.", e);
return;
} Defensive patterns
Strategy: fallback
Validate before calling
// validate that DDL used in the pipeline is resolvable before production
SchemaChangeEvent evt = resolver.resolve(testDdlRecord);
if (evt == null) {
log.warn("DDL will be skipped by deserializer; downstream schema will drift");
} Type guard
boolean failsFast(Exception e) {
return e instanceof SchemaEvolutionException; // classified schema errors must not be swallowed
} Try / catch
try {
resolver.resolve(record);
} catch (SchemaEvolutionException e) {
throw e; // schema divergence: fail the job
} catch (Exception e) {
log.warn("Failed to resolve schemaChangeEvent, just skip.", e);
} Prevention
- Keep the CDC connector version current with your database's DDL features.
- Test DDL migrations on a staging CDC pipeline before applying them to production tables.
- Monitor logs for this warning during schema changes and reconcile sink schemas afterward.
- Classify known schema-divergence errors as SchemaEvolutionException so they fail fast rather than being skipped.
When it happens
Trigger: A DDL event (ALTER TABLE ADD/DROP/MODIFY COLUMN, CREATE/DROP TABLE) arrives in the WAL/binlog stream and deserializeSchemaChangeRecord's call to the schemaChangeEventResolver throws while parsing or applying it — e.g. an unparseable DDL statement, an unsupported column type in a new column, or a resolver bug.
Common situations: Streaming a table while running ALTER TABLE ADD COLUMN with an exotic or unsupported type; DDL dialects the resolver does not support; CDC connector version older than the database emitting newer DDL syntax; schema-registry or Debezium record shape changes across versions.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- Unsupported resolve schemaChangeEvent {}, just skip.
- Unable to instantiate the database history class " + config.
- Data change record shouldn't use READ operation, the the rec
- The table changes should only have one element
- Unknown table change type:
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/48dfd83272fc62da.
Report an issue: GitHub.