一文帶你瞭解批流一體的高效數據同步插件—FlinkX

1、什麼是FlinkXgit

FlinkX是一款基於Flink的分佈式離線/實時數據同步插件,可實現多種異構數據源高效的數據同步,其由袋鼠雲於2016年初步研發完成,目前有穩定的研發團隊持續維護,已在Github上開源(開源地址詳見文章末尾),並維護該開源社區。目前已完成批流統一,離線計算與流計算的數據同步任務均可基於FlinkX實現。github

FlinkX將不一樣的數據源庫抽象成不一樣的Reader插件,目標庫抽象成不一樣的Writer插件,具備如下特色:數據庫

  • 基於Flink開發,支持分佈式運行;
  • 雙向讀寫,某數據庫既能夠做爲源庫,也能夠做爲目標庫;
  • 支持多種異構數據源,可實現MySQL、Oracle、SQLServer、Hive、Hbase等20多種數據源的雙向採集。
  • 高擴展性,強靈活性,新擴展的數據源可與現有數據源可即時互通。

2、FlinkX應用場景網絡

FlinkX數據同步插件主要應用於大數據開發平臺的數據同步/數據集成模塊,一般採用將底層高效的同步插件和界面化的配置方式相結合的方式,使大數據開發人員可簡潔、快速的完成數據同步任務開發,實現將業務數據庫的數據同步至大數據存儲平臺,從而進行數據建模開發,以及數據開發完成後,將大數據處理好的結果數據同步至業務的應用數據庫,供企業數據業務使用。併發

3、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機制,實現了斷點續傳、流數據續跑等功能,來了解一下它的新特性吧。spa

(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生成快照的時候提交事務,把當前的數據寫入數據庫,若是兩次快照期間任務失敗了,則此次事務裏的數據不會寫入數據庫,任務恢復時從上一次快照記錄的位置繼續同步數據,這樣就能夠作到任務屢次失敗續跑的狀況下準確的同步數據。

4、寫在後面

FlinkX通過袋鼠雲內部使用以及在大量的數據中臺項目中實踐,支持如下數據源。且在FlinkX的高擴展特性下,將持續支撐更多的數據源。


本文首發於:數棧研習社

數棧是雲原生—站式數據中臺PaaS,咱們在github上有一個有趣的開源項目:FlinkX。FlinkX是一個基於Flink的批流統一的數據同步工具,既能夠採集靜態的數據,好比MySQL,HDFS等,也能夠採集實時變化的數據,好比MySQL binlog,Kafka等,是全域、異構、批流一體的數據同步引擎,你們若是有興趣,歡迎來github社區找咱們玩~

相關文章
相關標籤/搜索