CloudCanal 同步 Debezium 数据实战
简述
Debezium 是一个开源的数据订阅工具,主要功能为捕获数据库变更事件发送到 Kafka。
CloudCanal 近期实现了从 Kafka 消费 Debezium 格式数据,将其 同步到 StarRocks、Doris、Elasticsearch、MongoDB、ClickHouse 等 12 种数据库和数仓,补全其数据到达能力。
本文将先简单介绍该项技术实现的背景,再通过 MySQL -> Kafka -> Starrocks 示例展示此功能。
为什么要消费 Debezium 格式数据
高流行度
Debezium 是一个高质量、被大量项目集成的开源项目,社区用户活跃,官方维护积极,修复 bug、增加新特性,不断更新版本。
作为 Kafka Connect 生态系统的一部分,Debezium 能够无缝与 Kafka 进行对接,为用户后端数据处理提供了强大的 实时数据准备 能力。
由此形成的高流行度,让每一个数据行业从业者不能忽视其影响力。
合理的消息结构
Schema(数据结构) 遵循 Kafka Connect 标准,提供了详细的字段信息。
"schema": {
"type": "struct",
"fields": [
{"type": "int32", "optional": false, "field": "id"},
{"type": "string", "optional": false, "field": "name"},
{"type": "int32", "optional": false, "field": "age"}
],
"optional": false,
"name": "my_database.user.Value"
}
Payload(数据)包含实际的数据库变更数据,与 Schema 中定义的字段对应。
"payload": {
"id": 123,
"name": "John Doe",
"age": 30,
"source": {
...
}
}
此外消息还携带了源端数据源全面的关联信息,包括库、表、时间戳、位点等信息。整体格式实用、简洁。
支持 Schema 演进
Debezium 不仅捕获数据库模式的当前状态,还能感知和记录每次模式变更细节。
当数据库表结构发生变化时(如添加、删除、修改字段等),Debezium 能够 实时捕获这些结构变更,确保变更事件的精准传递。
另外 Debezium 会为每个捕获的变更事件 记录包含当前和先前 Schema 的历史记录。
这意味着 可追溯任何时刻数据库 Schema,了解特定时间点表字段、数据类型等信息, 并且可精准还原数据库在某一时刻的结构,无需额外的查询或推测。
CDC 数据格式标准
Debezium 数据 Schema 基于 Kafka Connect 标准设计,这使 Debezium 产生的变更事件能够轻松地集成到各种 Kafka Connect 连接器中,实现了与 Kafka 生态系统的顺畅对接。
这个设计使得 Debezium 数据 Schema 有望成为 CDC(Change Data Capture) 领域标准,为实时数据流的流动提供了基础设施。
端到端的缺憾
Debezium 集如此众多的优点,但是其官方缺少消息到对端的能力(目前有在补充),这让一部分用户感觉束手无策,CloudCanal 支持消费 Debezium 数据即解决这个问题,为用户实时数据生态建设贡献绵薄之力。