alibaba/canal · error · CanalParseException

unsupport event type :{}

Error message

unsupport event type :{}

What it means

Thrown from parseRowsEvent() when the event header type code does not match any known rows-event type (WRITE_ROWS_EVENT_V1, WRITE_ROWS_EVENT, UPDATE_ROWS_EVENT_V1, UPDATE_ROWS_EVENT, PARTIAL_UPDATE_ROWS_EVENT, DELETE_ROWS_EVENT_V1, DELETE_ROWS_EVENT). Canal cannot map the numeric type code to an INSERT/UPDATE/DELETE semantic action.

Source

Thrown at parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java:545

                tableMeta = parseRowsEventForTableMeta(event);
            }

            if (tableMeta == null) {
                // 拿不到表结构,执行忽略
                return null;
            }

            EventType eventType = null;
            int type = event.getHeader().getType();
            if (LogEvent.WRITE_ROWS_EVENT_V1 == type || LogEvent.WRITE_ROWS_EVENT == type) {
                eventType = EventType.INSERT;
            } else if (LogEvent.UPDATE_ROWS_EVENT_V1 == type || LogEvent.UPDATE_ROWS_EVENT == type
                       || LogEvent.PARTIAL_UPDATE_ROWS_EVENT == type) {
                eventType = EventType.UPDATE;
            } else if (LogEvent.DELETE_ROWS_EVENT_V1 == type || LogEvent.DELETE_ROWS_EVENT == type) {
                eventType = EventType.DELETE;
            } else {
                throw new CanalParseException("unsupport event type :" + event.getHeader().getType());
            }

            RowChange.Builder rowChangeBuider = RowChange.newBuilder();
            rowChangeBuider.setTableId(event.getTableId());
            rowChangeBuider.setIsDdl(false);

            rowChangeBuider.setEventType(eventType);
            RowsLogBuffer buffer = event.getRowsBuf(charset);
            BitSet columns = event.getColumns();
            BitSet changeColumns = event.getChangeColumns();

            boolean tableError = false;
            int rowsCount = 0;
            while (buffer.nextOneRow(columns, false)) {
                // 处理row记录
                RowData.Builder rowDataBuilder = RowData.newBuilder();
                if (EventType.INSERT == eventType) {
                    // insert的记录放在before字段中

View on GitHub (pinned to 87be50e876)

Solutions

  1. Upgrade Canal to a version compatible with your MySQL server release.
  2. Check the event type code in the error message and cross-reference with MySQL binlog event constants.
  3. Verify binlog_format=ROW and binlog_row_image=FULL in MySQL configuration.
  4. If the event type is genuinely new, report it to the Canal project for support.

Example fix

-- before
mysql> SHOW VARIABLES LIKE 'binlog_row_image';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| binlog_row_image | MINIMAL|
+------------------+-------+

-- after
mysql> SET GLOBAL binlog_row_image = 'FULL';
Defensive patterns

Strategy: try-catch

Try / catch

try {
    Entry entry = parseRowsEvent(event);
} catch (CanalParseException e) {
    if (e.getMessage().contains("unsupport event type")) {
        // Log the type code for diagnosis and skip
        logger.error("Unsupported rows event type {}, skipping. Consider upgrading Canal.",
            event.getHeader().getType(), e);
        return null;
    }
    throw e;
}

Prevention

When it happens

Trigger: A RowsLogEvent is dispatched to parseRowsEvent() but event.getHeader().getType() returns a type code outside the recognized set. This can happen with a new MySQL binlog event type variant not yet supported by Canal's driver layer, or when the event was incorrectly classified as a rows event.

Common situations: A MySQL version introduces a new row-event variant (e.g. a future partial-update or compressed rows format). The Canal driver version is too old for the MySQL server version. Binlog format configuration (binlog_format, binlog_row_image) changed to a mode that produces unrecognized event types.

Related errors


AI-assisted analysis of alibaba/canal@87be50e876 (2026-08-14). Data as JSON: /api/errors/63b8f03f36a26e49. Report an issue: GitHub.