天天看點

FlinkX簡介

作者:散文随風想

一、什麼是FlinkX

FlinkX是一款基于Flink的分布式離線/實時資料同步插件,可實作多種異構資料源高效的資料同步,其由袋鼠雲于2016年初步研發完成,目前有穩定的研發團隊持續維護,已在Github上開源(開源位址詳見文章末尾),并維護該開源社群。目前已完成批流統一,離線計算與流計算的資料同步任務都可基于FlinkX實作。

FlinkX将不同的資料源庫抽象成不同的Reader插件,目标庫抽象成不同的Writer插件,具有以下特點:

基于Flink開發,支援分布式運作; 雙向讀寫,某資料庫既可以作為源庫,也可以作為目标庫; 支援多種異構資料源,可實作MySQL、Oracle、SQLServer、Hive、Hbase等20多種資料源的雙向采集。 高擴充性,強靈活性,新擴充的資料源可與現有資料源可即時互通。
FlinkX簡介

二、FlinkX應用場景

FlinkX資料同步插件主要應用于大資料開發平台的資料同步/資料內建子產品,通常采用将底層高效的同步插件和界面化的配置方式相結合的方式,使大資料開發人員可簡潔、快速的完成資料同步任務開發,實作将業務資料庫的資料同步至大資料存儲平台,進而進行資料模組化開發,以及資料開發完成後,将大資料處理好的結果資料同步至業務的應用資料庫,供企業資料業務使用。

三、FlinkX工作原理詳解

FlinkX基于Flink實作,其選型及優勢詳見

https://mp.weixin.qq.com/s/uQbGLY3_cj0h2H_PZZFRGw。FlinkX資料同步任務的本質是一個Flink程式,讀出寫入的資料同步任務會被翻譯成StreamGraph在Flink執行,FlinkX開發者隻需要關注InputFormat和OutputFormat接口實作即可。工作原理如下:

FlinkX簡介
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的高擴充特性下,将持續支撐更多的資料源。

FlinkX簡介

繼續閱讀