乐趣区

关于java:一文带你了解批流一体的高效数据同步插件FlinkX

一、什么是 FlinkX

FlinkX 是一款基于 Flink 的分布式离线 / 实时数据同步插件,可实现多种异构数据源高效的数据同步,其由袋鼠云于 2016 年初步研发实现,目前有稳固的研发团队继续保护,已在 Github 上开源(开源地址详见文章开端),并保护该开源社区。目前已实现批流对立,离线计算与流计算的数据同步工作都可基于 FlinkX 实现。

FlinkX 将不同的数据源库形象成不同的 Reader 插件,指标库形象成不同的 Writer 插件,具备以下特点:

  • 基于 Flink 开发,反对分布式运行;
  • 双向读写,某数据库既能够作为源库,也能够作为指标库;
  • 反对多种异构数据源,可实现 MySQL、Oracle、SQLServer、Hive、Hbase 等 20 多种数据源的双向采集。
  • 高扩展性,强灵活性,新扩大的数据源可与现有数据源可即时互通。

二、FlinkX 利用场景

FlinkX 数据同步插件次要利用于大数据开发平台的数据同步 / 数据集成模块,通常采纳将底层高效的同步插件和界面化的配置形式相结合的形式,使大数据开发人员可简洁、疾速的实现数据同步工作开发,实现将业务数据库的数据同步至大数据存储平台,从而进行数据建模开发,以及数据开发实现后,将大数据处理好的后果数据同步至业务的利用数据库,供企业数据业务应用。

三、FlinkX 工作原理详解

linkX 基于 Flink 实现,其选型及劣势详见

https://mp.weixin.qq.com/s/uQbGLY3_cj0h2H_PZZFRGw。FlinkX 数据同步工作的实质是一个 Flink 程序,读出写入的数据同步工作会被翻译成 StreamGraph 在 Flink 执行,FlinkX 开发者只须要关注 InputFormat 和 OutputFormat 接口实现即可。工作原理如下:

Engine 是袋鼠云封装的任务调度引擎,WEB 端配置好的数据同步工作首先会提交至任务调度引擎,Template 模块依据同步工作的配置信息加载源数据库和指标数据库对应的 Reader 和 Writer 插件,Reader 插件实现 InputFormat 接口,从数据库获取 DataStream 对象,Writer 插件实现 OutFormat 接口,将指标数据库与 DataStream 对象相关联,从而通过 DataStream 对象将读出写入串接在一起,组装成一个 Flink 工作提交至 Flink 集群上进行运行。

之前基于 Flink 的分片、累加器个性,解决了数据同步过程中的增量同步、多通道管制、脏数据管理与谬误治理等场景。19 年基于 Flink 的 checkpoint 机制,实现了断点续传、流数据续跑等性能,来理解一下它的新个性吧。

(1)断点续传

数据同步过程中,如果一个工作要同步 500G 的数据到指标库,曾经跑了 15min,但到 400G 的时候因为集群资源不够、网络等因素数据同步失败了,若须要重头跑此工作,想必该同学要抓狂了。FlinkX 基于 checkpoin 机制可反对断点续传,当同步工作因为上述起因失败时,不须要重跑工作,只需从断点持续同步,节俭重跑工夫和集群资源。

Flink 的 Checkpoint 性能是其实现容错的外围性能,它可能依据配置周期性地对工作中的 Operator/task 的状态生成快照,将这些状态数据定期长久化存储下来,当 Flink 程序一旦意外解体时,从新运行程序时能够有选择地从这些快照进行复原,从而修改因为故障带来的程序数据异样。

并且断点续传可和工作失败重试机制配合,即当工作执行失败,零碎会主动进行重试,若重试胜利则零碎会接着断点地位持续同步,从而缩小人为运维。

(2)实时采集与续跑

19 年 6 月份,袋鼠云数栈研发团队基于 FlinkX 实现批流数据采集对立,可对 MySQL Binlog、Filebeats、Kafka 等数据源进行实时采集,并可写入 Kafka、Hive、HDFS、Greenplum 等数据源,采集工作也反对作业并发数与作业速率的限度,以及脏数据管理。并基于 checkpoint 机制,可实现实时采集工作的续跑。当产生业务数据或 Flink 程序引起的采集过程中断时,可基于 Flink 定期存储的快照,对流数据的读取节点进行保留,从而在进行故障修复时,可抉择历史保留的数据断点进行续跑操作,保证数据的完整性。此性能在袋鼠云的 StreamWorks 产品中实现,欢送大家理解。

(3)流数据的脏数据管理

之前在 BatchWorks 离线计算产品中,已实现离线数据同步的脏数据管理,并基于 Flink 的累加器实现脏数据的谬误治理,当谬误量达到配置时,置工作失败。目前流数据实时采集也反对了此性能,即在将源库数据写入指标库的过程中,将谬误记录进行存储,以便后续剖析数据同步过程中的脏数据,并进行解决。但因为是流数据采集,工作具备不间断性,没有进行谬误数记录达到阈值的触发工作进行操作,待后续用户自行对脏数据分析,进行解决。

(4)数据写入至 Greenplum、OceanBase 数据源

Greenplum 是基于 PostgreSQL 的 MPP 数据库,反对海量数据的存储与治理,目前在市场上也被很多企业采纳。于最近,数栈基于 FlinkX 实现多类型数据源写入 Greenplum,除全量同步外,也反对局部数据库增量同步写入。OceanBase 是阿里研发的一款可扩大的金融畛域关系型数据库,其用法与 MySQL 基本一致,实现 OceanBase 的数据读入写出也是基于 jdbc 的连贯形式,进行数据表与字段的同步与写入,也反对对 OceanBase 进行增量写入,以及作业同步通道、并发的管制。

写入 Greenplum 等关系数据库时,默认是不应用事务的,因为数据量特地大的状况下,一旦工作失败,就会对业务数据库产生微小的影响。然而在开启断点续传的时候必须开启事务,如果数据库不反对事务,则无奈实现断点续传的性能。开启断点续传时,会在 Flink 生成快照的时候提交事务,把以后的数据写入数据库,如果两次快照期间工作失败了,则这次事务里的数据不会写入数据库,工作复原时从上一次快照记录的地位持续同步数据,这样就能够做到工作屡次失败续跑的状况下精确的同步数据。

四、写在前面

FlinkX 通过袋鼠云外部应用以及在大量的数据中台我的项目中实际,反对以下数据源。且在 FlinkX 的高扩大个性下,将继续撑持更多的数据源。


本文首发于:数栈研习社

数栈是云原生—站式数据中台 PaaS,咱们在 github 上有一个乏味的开源我的项目:FlinkX。FlinkX 是一个基于 Flink 的批流对立的数据同步工具,既能够采集动态的数据,比方 MySQL,HDFS 等,也能够采集实时变动的数据,比方 MySQL binlog,Kafka 等,是全域、异构、批流一体的数据同步引擎,大家如果有趣味,欢送来 github 社区找咱们玩~

退出移动版