一、Flink简介与数据同步需求
1、Flink简介
Flink是新型的计算框架,具有分布式、低延迟、高吞吐和高可靠的特性。其支持多种部署方式:local(单机)、standalone模式,也可以基于yarn,mesos或者k8s做资源调度。Flink提供了比较高级的API,我们能比较方便地扩展现有的API来满足一些特殊需求,此外Flink提供了完整的状态管理体系(checkpoint),可以基于这个机制实现断点续传。
2、数据同步需求
这里主要说明的是离线数据同步。实时数据同步相对而言没有周期性的资源调度问题,原生的Flink框架结合其丰富的connector即可满足大部分需求。
1)支持多种部署模式
开发测试时可以单机部署,在生产环境支持分布式部署。
2)分布式资源调度能力
如果可以基于yarn,mesos或者k8s等做资源调度,可以极大提高资源利用率、提升运营效率!
3)支持断点续传
在大数据量的传输场景下,当网络出现抖动\DB抖动等情况时任务可能会失败。那这个时候重跑任务耗时耗力(血与泪)。此时就需要能从失败的点继续跑,也就是断点续传。
3、常见异构数据同步工具对比
Flinkx是袋鼠云开源的一款基于Flink的分布式数据同步工具(框架)。
工具 | flinkx | datax | logkit | sqoop |
---|---|---|---|---|
架构 | 分布式 | 单机(分布式版本未开源) | 单机 | 分布式 |
同步速度控制 | 支持 | 支持 | 支持 | 不支持 |
脏数据管理 | 支持 | 支持 | 不支持 | 不支持 |
插件化 | 支持 | 支持 | 支持 | 不支持 |
断点续传 | 支持 | 不支持 | 不支持 | 不支持 |
配置方式 | json | json | web界面 | 脚本 |
经过对比不难发现:少数据量、简单数据源下,阿里开源的datax等已经可以满足需求。但在我们复杂环境下Flinkx凭借其分布式架构与断点续传特点,具有明显优势,比较符合我们的需求。
二、Flinkx框架实现与原理
1、实现概览
FlinkX采用了一种插件式的架构来实现多种异构数据源之间的数据同步:
- 不同的源数据库被抽象成不同的Reader插件;
- 不同的目标数据库被抽象成不同的Writer插件;
理论上,FlinkX框架可以支持任意数据源类型的数据同步工作。作为一套生态系统,每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。