功能描述
DTS 写入到 Kafka 的同步数据支持兼容开源工具 Canal 格式,采用 ProtoBuf 或者 JSON 的序列化协议,您可以在配置 DTS 同步任务的过程中选择数据格式 Canal Protobuf 或者 Canal JSON,然后使用消费 Demo 进行业务适配,即可得到消费数据。
方案对比
功能 | 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位精度的格式都进行兼容即可。