介绍
Maxwell 能够将 MySQL 的 binlog 解析为 JSON 格式的变更事件,通过 事件类型 标识数据变更的不同阶段或操作类型,如下:
- bootstrap-start
- bootstrap-complete
- bootstrap-insert
- insert
- update
- delete
全量同步事件(bootstrap 开头)
当 Maxwell 首次连接到 MySQL 或配置了 bootstrap 模式时,会先进行全量数据同步(读取已有数据),再监听增量变更。这三类事件用于标识全量同步的过程:
bootstrap-start
- 含义:全量同步开始的标志事件。
- 触发时机:Maxwell 开始全量读取某个表的数据时发出。
- 事件内容:包含数据库名(
database)、表名(table)等元信息,无具体数据。
例子:
{
"type": "bootstrap-start",
"database": "test",
"table": "user",
"ts": 1620000000
}
bootstrap-insert
- 含义:全量同步过程中读取的表中已有数据,本质是“历史数据的插入事件”。
- 触发时机:Maxwell 逐条读取表中现有数据时,每条数据对应一个该事件。
- 事件内容:包含表的全量字段和值,类似
insert事件,但类型为bootstrap-insert。
例子:
{
"type": "bootstrap-insert",
"database": "test",
"table": "user",
"data": { "id": 1, "name": "Alice", "age": 20 },
"ts": 1620000001
}
bootstrap-complete
- 含义:全量同步完成的标志事件。
- 触发时机:Maxwell 完成某个表的全量数据读取后发出。
- 事件内容:与
bootstrap-start对应,标识全量同步结束。
例子:
{
"type": "bootstrap-complete",
"database": "test",
"table": "user",
"ts": 1620000002
}
作用:通过这三类事件,下游系统可以区分“历史全量数据”和“实时增量变更”,便于初始化数据或全量校验。
增量变更事件
全量同步完成后,Maxwell 会持续监听 MySQL 的 binlog,将实时数据变更解析为以下事件:
insert
- 含义:插入事件,标识有新数据插入表中。
- 事件内容:
data字段包含插入的完整记录(所有字段和值)。
例子:
{
"type": "insert",
"database": "test",
"table": "user",
"data": { "id": 3, "name": "Charlie", "age": 25 },
"ts": 1620000003
}
update
- 含义:更新事件,标识表中已有数据被修改。
- 事件内容:
data字段:更新后的最新数据(所有字段)。old字段(可选):更新前的旧数据(仅包含被修改的字段,需 MySQL 开启binlog_row_image=FULL才能获取完整旧值)。
例子:
{
"type": "update",
"database": "test",
"table": "user",
"data": { "id": 1, "name": "Alice", "age": 21 }, // 新值
"old": { "age": 20 }, // 旧值(仅修改的字段)
"ts": 1620000004
}
delete
- 含义:删除事件,标识表中数据被删除。
- 事件内容:
data字段包含被删除的记录(删除前的完整数据)。
例子:
{
"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 等)通过消费这些事件实现数据同步、实时分析等功能。