Canal Oracle 是一款基于数据库日志增量订阅&消费组件的数据同步工具,是阿里巴巴数据库同步产品组的核心产品之一。
相比于传统基于 dump 方法的数据迁移,Canal Oracle 可以实现增量数据实时同步,避免了全量导出导入的低效率问题,同时还可以实现数据的异构同步,解决不同数据库之间数据格式的差异问题。
Canal 原理:Canal 基于数据库增量日志解析,模拟 MySQL Slave 的交互协议,从而达到订阅 MySQL 数据库的 binlog,解析并将数据更新到到其他数据存储中的目的。Canal 的数据来源可以是主库或从库,实现了轻量级数据同步,并且支持完整的事务和消息处理。
Canal Oracle 通过 canal.deployer.sh 脚本启动,配置启动项中指定了实例名,日志读取位置、kafka 地址、数据源数据库和目标数据库等参数。启动后 Canal Oracle 会监控 binlog 并对其进行解析,解析出相应的 CRUD 操作,将数据格式化后发送至 kafka 集群。
sudo sh ./canal.deployer.sh start
Canal Oracle 数据构造:Canal Oracle 可以将数据以 json 或 pb 格式进行构造,配置项中指定数据格式即可,默认为 json 格式。下面是一段构造后的 json 数据,可以看到其中包含了 binlog 中业务数据的相关信息。
{ "id":101, "name":"Lucy", "password": "abc123", "gendar":"female", "age":18, "last_updated":"2019-03-01 12:00:00", "binlog":{ "db":"test", "table":"user", "event":"insert", "ts":1547456827232, "pos":52686, "rowkey":"id=101" } }
Canal Oracle 使用场景:Canal Oracle 可以针对多个场景进行应用,比较常见的是数据实时同步场景,如 MySQL 数据实时同步至 Redis 集群,MongoDB 数据实时同步至 HBase 集群等。
Canal Oracle 还可以用于数据分析场景,如在数据同步过程中做数据统计、计数等操作,并将结果输出至实时大屏或者业务监控系统,通过数据可视化进一步挖掘业务数据价值。
总之,Canal Oracle 是一个非常优秀的基于数据库日志增量订阅&消费组件,能够帮助我们更加快速、高效地将数据同步至其他存储系统,提高数据处理效率和数据价值挖掘能力,具有非常重要的应用价值和意义。