作者介绍
吴夏,腾讯云TDSQL研发工程师,目前主要负责日志解析复制、数据传输同步模块的开发工作。
一、场景及需求
在金融业务场景中,数据的同步、订阅、分发是常见需求,例如保险行业常见的总分系统架构,多个子库需要实时地将业务数据同步至总库汇总查询;银行核心交易系统中,需要将交易数据实时同步至分析子系统进行报表、跑批等业务操作。
因此,腾讯云打造的分布式数据库TDSQL(Tencent distribute database)作为一个金融级数据库产品,对数据的分发、解耦能力是必不可少的。
▲ 基于总分的数据汇总架构
▲ 数据实时同步分析架构
其中,TDSQL-MULTISRCSYNC(下文简称多源同步)模块正是为了应对这样的需求和场景所开发的高性能、高一致、支持多种异构数据平台的数据分发服务。
该服务支持以TDSQL作为源端的数据实时同步分发至MySQL、Oracle、Postgres、Kafka等平台,同时也支持以TDSQL作为目标端,将MySQL或者Oracle的数据实时同步至TDSQL中,并且部署灵活,支持一对多、多对一等多种复制拓扑结构。当前该服务的官网名称为“数据同步”,是作为一个子功能集成在腾讯云TencentDB for TDSQL产品中。
二、系统架构
多源同步模块典型的基于日志的DCD复制技术,其系统架构如下:
从上图我们可以看到,整个系统可以大致分成三个部分:producter,store,consumer。
1、producter增量日志获取模块,主要负责解析获取源端的增量数据改动日志,并将获取到的日志解析封装为JSON协议的消息体,投送至Kafka消息队列。
当源端是MySQL或者TDSQL时,获取的增量日志为binlog事件,这里要求binlog必须是row格式且为full-image。当源端是Oracle,producter从Oracle的物化视图日志中获取增量数据并进行封装和投送。
这里producter在向Kafka生产消息时,采用at-least-once模式,即保证特定消息队列中至少有一份,不排除在队列中有消息重复的情况。
2、store这里采用Kafka作为中间存储队列,因为数据库系统日志有顺序性要求,因此这里所有的topic的partition个数均为1ÿ