袋鼠雲研發手記 | 數棧·開源: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/fl...

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在袋鼠雲數棧產品中的應用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章