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

  1. Read the exception stack trace attached to this warning to find the actual resolver failure (unsupported type, parse error).
  2. Upgrade the SeaTunnel CDC connector to a version whose schema resolver supports your DDL/data type.
  3. 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.
  4. If silent divergence is unacceptable, extend the deserializer to classify such errors as SchemaEvolutionException so the job fails fast instead of skipping.
  5. 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

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


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/48dfd83272fc62da. Report an issue: GitHub.