apache/seatunnel · warning
Rollback statements cannot be handled without binlog…
Error message
Rollback statements cannot be handled without binlog buffering, the connector will fail. Please check '{}' to see how to enable buffering What it means
A ROLLBACK statement appeared in the binlog as a QUERY event. Without binlog buffering enabled, Debezium cannot correctly process rollback semantics and warns that the connector will eventually fail if this keeps occurring. The warning points to the binlog.buffer.size config that enables buffering to handle it.
Solutions
- Enable binlog buffering by setting mysql connector 'database.binlog.buffer.size' (MySqlConnectorConfig.BUFFER_SIZE_FOR_BINLOG_READER) to a positive value
- Switch the source to binlog_format=ROW, which does not log ROLLBACK statements, and re-snapshot
- Identify the client issuing explicit ROLLBACK in binlogs (mysqlbinlog review) and refactor its transaction handling
- If failures follow the warning, restart streaming from a position before the ROLLBACK with buffering enabled
Example fix
// before // no buffer configured // after "database.binlog.buffer.size": 20480
Defensive patterns
Strategy: validation
Validate before calling
// Enable buffering support before starting the connector: // config['database.binlog.buffer.size'] = 20480 // > 0 // and verify binlog_format=ROW on the source
Prevention
- Set database.binlog.buffer.size to a positive value when statement/mixed sources are unavoidable
- Migrate the source to binlog_format=ROW
- Avoid applications issuing explicit ROLLBACK against CDC-monitored schemas
- Review binlogs with mysqlbinlog for transaction-control statements before onboarding a database
When it happens
Trigger: handleQueryEvent receives sql equal (case-insensitive) to 'ROLLBACK' while the buffered binlog reader is not enabled (MySqlConnectorConfig.BUFFER_SIZE_FOR_BINLOG_READER unset/zero), typically under binlog_format=STATEMENT or MIXED where explicit transaction statements are logged.
Common situations: Statement-based replication sources where applications issue explicit ROLLBACK; MIXED-format binlogs from legacy databases; connectors streaming through transaction-control statements issued by migration tools.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- A deserialization failure event arrived
- Cannot read the binlog filename and position via
- Cannot read the binlog filename and position via
- Cannot read the binlog filename and position via
- Encountered change event
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/7b49e218f2c56e40.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-mysql/src/main/java/io/debezium/connector/mysql/MySqlStreamingChangeEventSource.java:658
// This is an XA transaction, and we currently ignore these and do nothing ...
return;
}
if (connectorConfig.getDdlFilter().test(sql)) {
LOGGER.debug("DDL '{}' was filtered out of processing", sql);
return;
}
if (upperCasedStatementBegin.equals("INSERT ")
|| upperCasedStatementBegin.equals("UPDATE ")
|| upperCasedStatementBegin.equals("DELETE ")) {
LOGGER.warn(
"Received DML '"
+ sql
+ "' for processing, binlog probably contains events generated with statement or mixed based replication format");
return;
}
if (sql.equalsIgnoreCase("ROLLBACK")) {
// We have hit a ROLLBACK which is not supported
LOGGER.warn(
"Rollback statements cannot be handled without binlog buffering, the connector will fail. Please check '{}' to see how to enable buffering",
MySqlConnectorConfig.BUFFER_SIZE_FOR_BINLOG_READER.name());
}
final List<SchemaChangeEvent> schemaChangeEvents =
taskContext
.getSchema()
.parseStreamingDdl(
partition,
sql,
command.getDatabase(),
offsetContext,
clock.currentTimeAsInstant());
try {
for (SchemaChangeEvent schemaChangeEvent : schemaChangeEvents) {
if (taskContext.getSchema().skipSchemaChangeEvent(schemaChangeEvent)) {
continue;
}View on GitHub (pinned to cf67b549a7)