作為一家創新驅動的科技公司,袋鼠雲每年研發投入達數千萬,公司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在袋鼠雲數棧產品中的應用