做爲一家創新驅動的科技公司,袋鼠雲每一年研發投入達數千萬,公司80%員工都是技術人員,袋鼠雲產品家族包括企業級一站式數據中臺PaaS數棧、交互式數據可視化大屏開發平臺Easy[V]等產品也在迅速迭代。在進行產品研發的過程當中,技術小哥哥們能文能武,不斷提高產品性能和體驗的同時,也把這些提高和優化過程記錄下來,現錄入「袋鼠雲研發手記」專欄中,以和業內童鞋們分享交流。java
下爲「袋鼠雲研發手記」專欄第二期,本期做者爲袋鼠雲數棧引擎團隊。git
袋鼠雲數棧引擎團隊github
袋鼠雲數棧引擎團隊擁有多名專家級別,經驗豐富的後端開發工程師,分別支撐公司大數棧產品線的不一樣子項目的開發需求,從項目中提取並開源了FlinkX(基於Flink的數據同步),Jlogstash(logstash 的java 版本實現),FlinkStreamSQL(擴展原生FlinkSQL,實現流與維表的join)多個項目。數據庫
在長期的項目實踐與產品迭代過程當中,團隊成員在 Hadoop技術棧上不斷深耕探索,積累了豐富的經驗與最佳實踐。後端
第二期
數棧·開源
Github上400+Star的「硬核」分佈式同步工具FlinkX安全
FlinkX 已經開源在Github上目前已獲400+Star,查看地址:https://github.com/DTStack/fl...網絡
一、袋鼠云爲何要自研數據同步工具?架構
袋鼠雲做爲一家數據智能公司,自研開發企業級一站式數據中臺PaaS產品——數棧。框架
關於數棧運維
數棧具備8大產品模塊
一站式大數據開發平臺,幫助企業快速徹底數據中臺搭建
海量數據秒級查詢,極速響應能力,幫助企業自由的數據探索
對過程數據和結果數據進行質量校驗,幫助企業及時發現數據質量問題
可視化的數據資產中心,幫助企業全盤掌控數據資產狀況和數據的來源去向
使企業數據標準化,模型化,幫助企業實現數據管理規範化
快速生成數據API、統一管理API服務,幫助企業提升數據開放效率
在線拖拉拽的方式快速搭建交互式數據可視化大屏,讓數據價值看得見
全自動化,全生命週期的運維管家,提供安全穩定的數棧部署與監控服務
其中,「數據同步」是數棧開發套件中一個很是重要的功能,咱們對數據同步工具備3點要求:
一是支持多種部署模式,好比測試單機部署,生產分佈式部署。
二要基於yarn,mesos或者k8s作資源調度,提升資源利用率。
三要支持斷點續傳。由於在大數據量的傳輸場景下,因爲網絡出現抖動等緣由,可能致使任務失敗,那這個時候不可能重跑任務,這樣太耗時了,須要從失敗的點繼續跑;
當時,市面上,並無知足以上三點要求的數據同步工具。
二、爲何基於Flink?
Flink是新型的計算框架,支持多種部署方式local(單機),standalone模式,也能夠基於yarn,mesos或者k8s作資源調度;而且flink提供了比較高級的API,咱們能比較方便地擴展示有的API來知足咱們本身的特殊需求;並且Flink提供了完整的狀態管理體系(checkpoint),斷點續傳就是基於checkpoint機制來實現的。
數據同步工具對比
三、FlinkX 概覽
FlinkX是在袋鼠雲內部普遍使用的一個基於Flink的異構數據源離線同步工具,用於在多種數據源(MySQL、Oracle、SqlServer、Ftp、Hdfs,HBase、Hive、Elasticsearch等)之間進行高效穩定的數據同步。
FlinkX簡化了數據同步任務的開發過程,用戶只需提供一份數據同步任務的配置,FlinkX會將配置轉化爲Flink任務,並自動提交到Flink集羣上執行。
做爲一個面向分佈式數據流處理和批量數據處理的開源計算平臺,Flink具備分佈式、低延遲、高吞吐和高可靠的特性。
FlinkX實現了多種異構數據源之間高效的數據遷移
四、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任務的自動組裝
五、FlinkX的優點
1、便於使用
用戶只須要提供一份數據同步配置信息,無需編寫程序,FlinkX會配置信息自動轉換爲Flink任務並提交到Flink集羣執行。
2、性能優越
FlinkX會將數據同步任務提交到Flink集羣中的執行,使得FlinkX自然具備Flink的性能優點,主要表現爲分佈式、低延遲、高吞吐和高可靠。
3、多運行模式
同普通的Flink任務同樣,FlinkX支持local、standalone和yarn三種運行模式。
「local模式」就是在本地開啓一個mini的Flink集羣執行Flink任務,這種運行模式的好處是使用方便,不須要預先啓動分佈式集羣,適用於測試和實驗環境;缺點是因爲單點執行,可靠性差,當數據量大時吞吐量受限;
「standalone模式」是指以獨立部署的方式啓動一個Flink集羣,而後將提交Flink任務到該集羣上執行;
「yarn模式」是指在yarn集羣中部署Flink集羣,而後將Flink任務提交到部署在yarn集羣中的Flink集羣上執行;standalone模式和yarn模式都是分佈式地執行FlinkX,而yarn模式能夠利用yarn的資源管理功能,於是成爲部署FlinkX應用時的首選。
4、開放式可擴展
只要你願意,你能夠給任何類型的數據源開發Reader和Writer插件。
5、錯誤控制和髒數據管理
錯誤控制能夠在數據同步配置信息中設置錯誤記錄閾值、錯誤佔比閾值,使得數據同步任務在出錯時及時中止,避免系統資源的浪費。
髒數據管理能夠將錯誤記錄、錯誤緣由、錯誤類型輸出到Hive表中,便於往後的排查工做。
六、FlinkX在數棧產品中的應用
使用數棧的數據開發套件,用戶能夠經過界面嚮導可視化的建立一個數據同步任務,而FlinkX正是數據同步的底層執行引擎。
FlinkX在袋鼠雲數棧產品中的應用