数据同步
数据同步技术更通用的含义是不同系统间的数据流转,有多种不同的应用场景。主数据库与备份数据库之间的备份,主系统与子系统之间的数据更新,同类型不同集群数据库之间的数据同步。还有不同地域、不同数据库类型之间的数据传输交换,比如分布式业务系统域数据仓库系统之间的数据同步。
数据同步的基础
数据类型多种多样,结构化数据、半结构化数据、非结构化数据。同步方式可以分为三种:直连同步、数据文件同步和数据库日志解析同步
-
直连同步
-
ODBC\JDBC
-
-
数据文件同步
-
基于FTP
-
-
数据库日志解析同步
-
读取归档日志文件收集变化的数据信息
-
阿里数据仓库的同步方式
-
批量数据同步
-
DataX
-
每天处理2PB左右的批量转换为对应的数据格式写入
-
Framework+Plugin
-
Job
-
Splitter
-
Sub-Job
-
Reader
-
Channel
-
Writer
-
-
-
-
实时数据同步
-
服务器集群由成千上万台机器,所产生的日志需要尽快的以数据流的方式不间断地同步到数据仓库。
-
对业务系统产生的实时数据处理,如双十一实时大屏
-
TT(TimeTunnel)
-
实时数据传输平台
-
高性能、实时性、顺序性、高可靠性、高可用性、可扩展性
-
一种基于生产者、消费者、Topic消息标识的消息中间件,将消息持久化到Hbase的高可用、分布式数据交互系统
-
生产者
-
消息数据的生产端
-
-
消费者
-
消息数据的接收端
-
-
Topic
-
消息类型的标识
-
-
Broker
-
负责处理客户端收发消息数据的请求,然后往HBase取发数据
-
-
主动、被动等多种数据订阅机制,订阅端自动负载均衡,消费者自己把我消费策略。对于读写比例很高的Topic,能够做到读写分离,使消费不影响发送。每天实时同步几百TB
-
-
-
数据同步遇到的问题与解决方案
-
分库分表的处理
-
TDDL
-
-
高效同步和批量同步
-
问题
-
业务的发展和变化,会新增大批量的数据同步,使用传统方式每天去完成成百上千的数据同步工作
-
数据源种类丰富,不同类型需要开发人员了解其特殊配置
-
部分真正的数据需求方
-
-
解决方案
-
OneClick产品
-
对不同数据源的数据同步配置透明化
-
简化数据同步的操作步骤
-
降低数据同步的技能门槛
-
-
-
实现
-
数据的一键化和批量化
-
一键完成DDL和DML的生成、数据的冒烟测试以及生产环境中测试等
-
-
-
增量和全量同步的合并
-
数据量过大
-
传统合并技术
-
update+insert
-
-
现在比较推荐的方式
-
full outer join + 数据全量覆盖重新加载
-
当天的增量与前一天的全量数据做全外连接
-
-
-
-
-
同步性能的处理
-
问题
-
设置的线程数达不到要求
-
不懂如何设置线程数
-
不同的数据同步任务重要成都不一样
-
-
负载均衡的解决方案
-
用户创建数据同步任务
-
系统提前获知及设定的数据,估算该任务需要同步的数据量、平均同步速度
-
根据需要同步的总线程数将待同步的数据拆分成相同数量的数据块,一个现成处理一个数据块,并将该任务对应的所有现成提交至同步控制器
-
同步控制器判断需要同步的总线程数是否大于首轮期望值
-
同步控制器采用多机多线程的数据同步模式,准备该任务第一轮现成的跳读,优先发送优先级高的
-
同步控制器准备一定数据量的虚拟线程
-
任务开始同步
-
任务同步完成
-
-
-
数据漂移的处理
-
modified_time、log_time、proc_time、extract_time时间不统一
-
处理方法
-
多获取后一天的数据
-
proc_time来限制
-
一个订单是当天支付的,但是第二天凌晨申请退款关闭了该订单,那么下游在统计支付订单状态会出现错误
-
-
通过多个时间戳字段限制时间来获取相对准确的数据
-
log_time分别冗余前一天最后15分钟和后一天凌晨开始15分钟 数据,并用modified_time过滤非当天数据,确保数据不会因为系统问题而遗漏
-
根据log_time获取后一天15分钟的数据;针对此数据,按照主键根据log_time做升序排列去重
-
全外连接拼接
-
-
-
-