Canal Demo 说明(Canal ProtoBuf/Canal JSON)

最近更新时间:2024-11-08 16:18:52

我的收藏

功能描述

DTS 写入到 Kafka 的同步数据支持兼容开源工具 Canal 格式,采用 ProtoBuf 或者 JSON 的序列化协议,您可以在配置 DTS 同步任务的过程中选择数据格式 Canal Protobuf 或者 Canal JSON,然后使用消费 Demo 进行业务适配,即可得到消费数据。



如果您想了解更多 Canal 信息,请参考 Canal 详情

方案对比

功能
DTS 同步到 Kafka 方案
Canal 同步方案
数据类型
全量+增量
仅增量
数据格式
Canal ProtoBuf、Canal JSON
ProtoBuf、JSON
成本
购买云资源,初始配置完成后,后续基本不需要维护
需要客户自己部署和维护

Canal JSON 格式兼容性说明

用户可使用之前 Canal 方案中的消费程序直接消费。对 DTS 方案中 Canal JSON 格式进行数据消费时的字段名称,与 Canal 方案中 JSON 格式的字段名称保持一致,仅需要注意以下差异。
1. 源库中二进制相关类型的字段(包括 binary、varbinary、blob、tinyblob、mediumblob、longblob、geometry)同步到目标端后会转换为 HexString,请用户在消费数据时注意。
2. 源库中 Timestamp 类型的字段同步到目标端会转换为0时区(如"2021-05-17 07:22:42 +00:00"),用户在解析和转换的时候需要考虑时区信息。
3. Canal 方案的 JSON 格式中定义了 sqlType 字段,该字段在 JDBC(Java 数据库连接)中使用,表示 SQL 数据类型。因为 Canal 底层采用 Java 语言,而 DTS 底层采用 Golang 语言实现,所以 DTS 提供的 Canal JSON 格式中这个字段留空处理。

Canal ProtoBuf 格式兼容性说明

对 Canal ProtoBuf 格式的数据消费,需要使用 DTS 提供的协议文件,因为 DTS 协议文件中增加了如全量同步等功能逻辑,该协议文件已包含在消费 Demo 中。所以用户需要使用 DTS 提供的消费 Demo,并在这个 Demo 基础上适配自身业务逻辑,才能得到消费数据。
消费 DTS 提供的 Canal ProtoBuf 格式数据时的字段名称,与 Canal 方案提供的 ProtoBuf 格式一致,仅需要注意以下差异。
1. 源库中二进制相关类型的字段(包括 binary、varbinary、blob、tinyblob、mediumblob、longblob、geometry)同步到目标端后会转换为 HexString,请用户在消费数据时注意。
2. 源库中 Timestamp 类型的字段同步到目标端会转换为0时区(如"2021-05-17 07:22:42 +00:00"),用户在解析和转换的时候需要考虑时区信息。

数据转化逻辑

对于时间类型,转换逻辑如下。
datetime:DTS 对源库全量及增量数据的精度解析,与源库实际的精度保持一致(0~6位精度)。
示例1:源库 INSERT 数据 datetime 值为 2024-10-24 12:34:56.123456,消费到的数据为 2024-10-24 12:34:56.123456
示例2:源库 INSERT 数据 datetime 值为 2024-10-25 12:34:56,消费到的数据为 2024-10-24 12:34:56
time:DTS 解析的精度一定大于等于源端精度,必要时会补0~6位精度。
timestamp:DTS 对源库全量及增量数据的精度解析,与源库实际的精度保持一致(0~6位精度)。
说明:
建议用户在消费数据时,不必关注源库的精度,消费程序中对时间类型的字段解析0~6位精度的格式都进行兼容即可。