袋鼠雲研發手記 | 數棧·開源:Github上400+Star的硬核分布式同步工具FlinkX


作為一家創新驅動的科技公司,袋鼠雲每年研發投入達數千萬,公司80%員工都是技術人員,袋鼠雲產品家族包括企業級一站式數據中台PaaS數棧、交互式數據可視化大屏開發平台Easy[V]等產品也在迅速迭代。在進行產品研發的過程中,技術小哥哥們能文能武,不斷提升產品性能和體驗的同時,也把這些提升和優化過程記錄下來,現錄入“袋鼠雲研發手記”專欄中,以和業內童鞋們分享交流。

下為“袋鼠雲研發手記”專欄第二期,本期作者為袋鼠雲數棧引擎團隊。

 

袋鼠雲數棧引擎團隊

袋鼠雲數棧引擎團隊擁有多名專家級別,經驗豐富的后端開發工程師,分別支撐公司大數棧產品線的不同子項目的開發需求,從項目中提取並開源了FlinkX(基於Flink的數據同步),Jlogstash(logstash 的java 版本實現),FlinkStreamSQL(擴展原生FlinkSQL,實現流與維表的join)多個項目。

 

在長期的項目實踐與產品迭代過程中,團隊成員在 Hadoop技術棧上不斷深耕探索,積累了豐富的經驗與最佳實踐。

 

第二期

數棧·開源

Github上400+Star的「硬核分布式同步工具FlinkX

 

FlinkX 已經開源在Github上目前已獲400+Star,查看地址:https://github.com/DTStack/flinkx

 

1、袋鼠雲為什么要自研數據同步工具?

袋鼠雲作為一家數據智能公司,自研開發企業級一站式數據中台PaaS產品——數棧。

 

關於數棧

數棧具有8大產品模塊

  • 離線/實時開發套件

一站式大數據開發平台,幫助企業快速完全數據中台搭建

  • 分析引擎

海量數據秒級查詢,極速響應能力,幫助企業自由的數據探索

  • 數據質量

對過程數據和結果數據進行質量校驗,幫助企業及時發現數據質量問題

  • 數據地圖

可視化的數據資產中心,幫助企業全盤掌控數據資產情況和數據的來源去向

  • 數據模型

使企業數據標准化,模型化,幫助企業實現數據管理規范化

  • 數據API

快速生成數據API、統一管理API服務,幫助企業提高數據開放效率

  • Easy[V]

在線拖拉拽的方式快速搭建交互式數據可視化大屏,讓數據價值看得見

  • EasyManager

全自動化,全生命周期的運維管家,提供安全穩定的數棧部署與監控服務

 

其中,「數據同步」是數棧開發套件中一個非常重要的功能,我們對數據同步工具有3點要求:

  • 一是支持多種部署模式,比如測試單機部署,生產分布式部署。

  • 二要基於yarn,mesos或者k8s做資源調度,提高資源利用率。

  • 三要支持斷點續傳。因為在大數據量的傳輸場景下,由於網絡出現抖動等原因,可能導致任務失敗,那這個時候不可能重跑任務,這樣太耗時了,需要從失敗的點繼續跑;

當時,市面上,並沒有滿足以上三點要求的數據同步工具。

 

2、為什么基於Flink?

 

Flink是新型的計算框架,支持多種部署方式local(單機),standalone模式,也可以基於yarn,mesos或者k8s做資源調度;並且flink提供了比較高級的API,我們能比較方便地擴展現有的API來滿足我們自己的特殊需求;而且Flink提供了完整的狀態管理體系(checkpoint),斷點續傳就是基於checkpoint機制來實現的。

數據同步工具對比

 

3、FlinkX 概覽

FlinkX是在袋鼠雲內部廣泛使用的一個基於Flink的異構數據源離線同步工具,用於在多種數據源(MySQL、Oracle、SqlServer、Ftp、Hdfs,HBase、Hive、Elasticsearch等)之間進行高效穩定的數據同步。

FlinkX簡化了數據同步任務的開發過程,用戶只需提供一份數據同步任務的配置,FlinkX會將配置轉化為Flink任務,並自動提交到Flink集群上執行。

作為一個面向分布式數據流處理和批量數據處理的開源計算平台,Flink具有分布式、低延遲、高吞吐和高可靠的特性。

FlinkX實現了多種異構數據源之間高效的數據遷移

 

 

4、FlinkX的設計思路

2.1 插件式架構

FlinkX采用了一種插件式的架構:

  • 不同的源數據庫被抽象成不同的Reader插件;

  • 不同的目標數據庫被抽象成不同的Writer插件

整個數據同步任務共有的處理邏輯被抽象在Template模塊中,該模塊根據數據同步任務配置加載對應的Reader和Writer插件,組裝Flink任務,並提交到Flink集群執行;

FlinkX支持任意數據源類型的數據同步工作

FlinkX框架可以支持任意數據源類型的數據同步工作。作為一個開放式系統,用戶可以根據需要開發新的插件,以接入新的數據庫類型。

2.2 Flink任務的自動組裝

Template模塊根據同步任務的配置信息加載源數據庫和目的數據庫對應的Reader插件和Writer插件;

Reader插件實現了InputFormat接口,從源數據庫中獲取DataStream對象;

Writer插件實現了OutputFormat接口,將目的數據庫與DataStream對象相關聯;

Template模塊通過DataStream對象將Reader和Writer串接在一起,組裝成一個Flink任務,並提交到Flink集群上執行。

Flink任務的自動組裝

 

5、FlinkX的優勢

一、便於使用

用戶只需要提供一份數據同步配置信息,無需編寫程序,FlinkX會配置信息自動轉換為Flink任務並提交到Flink集群執行。

二、性能優越

FlinkX會將數據同步任務提交到Flink集群中的執行,使得FlinkX天然具有Flink的性能優勢,主要表現為分布式、低延遲、高吞吐和高可靠。

三、多運行模式

同普通的Flink任務一樣,FlinkX支持local、standalone和yarn三種運行模式。

  • 「local模式」就是在本地開啟一個mini的Flink集群執行Flink任務,這種運行模式的好處是使用方便,不需要預先啟動分布式集群,適用於測試和實驗環境;缺點是由於單點執行,可靠性差,當數據量大時吞吐量受限;

  • 「standalone模式」是指以獨立部署的方式啟動一個Flink集群,然后將提交Flink任務到該集群上執行;

  • 「yarn模式」是指在yarn集群中部署Flink集群,然后將Flink任務提交到部署在yarn集群中的Flink集群上執行;standalone模式和yarn模式都是分布式地執行FlinkX,而yarn模式可以利用yarn的資源管理功能,因而成為部署FlinkX應用時的首選。

     

四、開放式可擴展

只要你願意,你可以給任何類型的數據源開發Reader和Writer插件。

五、錯誤控制和臟數據管理

  • 錯誤控制可以在數據同步配置信息中設置錯誤記錄閾值、錯誤占比閾值,使得數據同步任務在出錯時及時停止,避免系統資源的浪費。

  • 臟數據管理可以將錯誤記錄、錯誤原因、錯誤類型輸出到Hive表中,便於日后的排查工作。

 

6、FlinkX在數棧產品中的應用

使用數棧的數據開發套件,用戶可以通過界面向導可視化的創建一個數據同步任務,而FlinkX正是數據同步的底層執行引擎。

FlinkX在袋鼠雲數棧產品中的應用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM