Maxwell1.29.x type事件类型(bootstrap-start、bootstrap-complete、bootstrap-insert、insert、update、delete) 作者:马育民 • 2025-08-13 14:45 • 阅读:10007 # 介绍 Maxwell 能够将 MySQL 的 binlog 解析为 JSON 格式的变更事件,通过 **事件类型** 标识数据变更的不同阶段或操作类型,如下: - bootstrap-start - bootstrap-complete - bootstrap-insert - insert - update - delete # 全量同步事件(bootstrap 开头) 当 Maxwell 首次连接到 MySQL 或配置了 `bootstrap` 模式时,会先进行**全量数据同步**(读取已有数据),再监听增量变更。这三类事件用于标识全量同步的过程: ### bootstrap-start - 含义:全量同步开始的标志事件。 - 触发时机:Maxwell 开始全量读取某个表的数据时发出。 - 事件内容:包含数据库名(`database`)、表名(`table`)等元信息,无具体数据。 例子: ```json { "type": "bootstrap-start", "database": "test", "table": "user", "ts": 1620000000 } ``` ### bootstrap-insert - 含义:全量同步过程中读取的表中已有数据,本质是“历史数据的插入事件”。 - 触发时机:Maxwell 逐条读取表中现有数据时,每条数据对应一个该事件。 - 事件内容:包含表的全量字段和值,类似 `insert` 事件,但类型为 `bootstrap-insert`。 例子: ```json { "type": "bootstrap-insert", "database": "test", "table": "user", "data": { "id": 1, "name": "Alice", "age": 20 }, "ts": 1620000001 } ``` ### bootstrap-complete - 含义:全量同步完成的标志事件。 - 触发时机:Maxwell 完成某个表的全量数据读取后发出。 - 事件内容:与 `bootstrap-start` 对应,标识全量同步结束。 例子: ```json { "type": "bootstrap-complete", "database": "test", "table": "user", "ts": 1620000002 } ``` **作用**:通过这三类事件,下游系统可以区分“历史全量数据”和“实时增量变更”,便于初始化数据或全量校验。 # 增量变更事件 全量同步完成后,Maxwell 会持续监听 MySQL 的 binlog,将实时数据变更解析为以下事件: ### insert - 含义:插入事件,标识有新数据插入表中。 - 事件内容:`data` 字段包含插入的完整记录(所有字段和值)。 例子: ```json { "type": "insert", "database": "test", "table": "user", "data": { "id": 3, "name": "Charlie", "age": 25 }, "ts": 1620000003 } ``` ### update - 含义:更新事件,标识表中已有数据被修改。 - 事件内容: - `data` 字段:更新后的最新数据(所有字段)。 - `old` 字段(可选):更新前的旧数据(仅包含被修改的字段,需 MySQL 开启 `binlog_row_image=FULL` 才能获取完整旧值)。 例子: ```json { "type": "update", "database": "test", "table": "user", "data": { "id": 1, "name": "Alice", "age": 21 }, // 新值 "old": { "age": 20 }, // 旧值(仅修改的字段) "ts": 1620000004 } ``` ### delete - 含义:删除事件,标识表中数据被删除。 - 事件内容:`data` 字段包含被删除的记录(删除前的完整数据)。 例子: ```json { "type": "delete", "database": "test", "table": "user", "data": { "id": 2, "name": "Bob", "age": 22 }, // 被删除的记录 "ts": 1620000005 } ``` # 总结 | 事件类型 | 触发场景 | 核心作用 | |--------------------|---------------------------|-------------------------------------------| | `bootstrap-start` | 全量同步开始 | 标识某张表的全量读取开始 | | `bootstrap-insert` | 全量同步过程中 | 输出表中已有的历史数据(全量初始化) | | `bootstrap-complete` | 全量同步结束 | 标识某张表的全量读取完成 | | `insert` | 实时插入新数据 | 捕获新增记录 | | `update` | 实时更新数据 | 捕获记录的修改(包含新旧值) | | `delete` | 实时删除数据 | 捕获被删除的记录 | 这些事件可以被 Kafka、RabbitMQ 等消息中间件接收,下游系统(如 Flink、Spark、Elasticsearch 等)通过消费这些事件实现数据同步、实时分析等功能。 原文出处:http://www.malaoshi.top/show_1GW1fV0FPDak.html