alibaba/canal · error · RuntimeException

ERROR ## parser of eromanga-event has an error , data:{}

Error message

ERROR ## parser of eromanga-event has an error , data:{}

What it means

Error "ERROR ## parser of eromanga-event has an error , data:{}" thrown in alibaba/canal.

Source

Thrown at client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/MessageUtil.java:33

public class MessageUtil {

    public static List<Dml> parse4Dml(String destination, String groupId, Message message) {
        if (message == null) {
            return null;
        }
        List<CanalEntry.Entry> entries = message.getEntries();
        List<Dml> dmls = new ArrayList<>(entries.size());
        for (CanalEntry.Entry entry : entries) {
            if (entry.getEntryType() == CanalEntry.EntryType.TRANSACTIONBEGIN
                || entry.getEntryType() == CanalEntry.EntryType.TRANSACTIONEND) {
                continue;
            }

            CanalEntry.RowChange rowChange;
            try {
                rowChange = CanalEntry.RowChange.parseFrom(entry.getStoreValue());
            } catch (Exception e) {
                throw new RuntimeException("ERROR ## parser of eromanga-event has an error , data:" + entry.toString(),
                    e);
            }

            CanalEntry.EventType eventType = rowChange.getEventType();

            final Dml dml = new Dml();
            dml.setIsDdl(rowChange.getIsDdl());
            dml.setDestination(destination);
            dml.setGroupId(groupId);
            dml.setDatabase(entry.getHeader().getSchemaName());
            dml.setTable(entry.getHeader().getTableName());
            dml.setType(eventType.toString());
            dml.setEs(entry.getHeader().getExecuteTime());
            dml.setIsDdl(rowChange.getIsDdl());
            dml.setTs(System.currentTimeMillis());
            dml.setSql(rowChange.getSql());
            dmls.add(dml);
            List<Map<String, Object>> data = new ArrayList<>();

View on GitHub (pinned to 87be50e876)

Solutions

  1. Check that the message bytes are valid canal Entry protobuf data; corrupted or non-canal messages on the topic cause this parse error.
  2. Ensure producer and consumer use compatible canal message serialization (flatMessage vs raw Entry).
  3. If using MQ, verify the topic contains only canal-produced messages for this instance.

When it happens

Trigger: Thrown at client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/MessageUtil.java:33 when the library encounters an invalid state.

Common situations: Entry parse failure in MessageUtil. Do not let one bad entry abort the batch; log the raw data bounded in size and skip or route the entry to an error path.


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