因項目需要,結合目前參與的項目,以及個人技術能力范圍,組合研發一套web可視化數據同步系統,正式名稱:DataXP。
項目背景:接觸過阿里雲這類大數據平台,對於中大型項目以及需要與外部系統對接數據的情況下,幾乎都需要數據共享/分析處理/ETL同步等功能。
避免重復造輪子,首頁了解了一番目前成熟的kettle這類,存在一些問題,要不是商業,要不就是主流容器化支持不太好,沒有Web管理控制台等等,總之開源上想使用一款體驗好,技術主流,部署簡單,功能穩定來說比較困難,通常都無法直接拿過來用,多多少少有很多不足之處需要二次開發,而且設計成型跨開發語言難以二開,而且程序組件都是分散的,這里裝一個那里裝一個,因此決定組合一套成熟技術,開發一個通用性的數據同步系統,引入了一些開源優秀框架,其中核心組件1.XXLJob分布式調度,用於分布式調度執行節點;2.DataX阿里雲DataWorks商業版本的開源版本,因為使用過DataWorks對DataX的插件設計思路很感興趣,支持各種異構數據源同步,專業的,詳情百度了解,最后打包成docker鏡像,只要你有一個docker環境和mysql數據庫就可以跑起來,運行非常簡單。
整體架構設計思路:
1.支持容器化Docker一鍵部署,快速交付;
2.嘿嘿,必須是java開發語言,熟悉的SpringBoot搭建的管理后台;
3.開發兩個服務1個是admin,一個是node執行器,admin負責調度,node負責執行任務;
4.admin和node分別通過源碼的方式集成XxlJob的admin和client,有少許的源碼改造工作,盡量保留xxljob的原汁原味,方便后期升級;node單獨集成DataX3.0一起打包,admin和node會獨立打包的docker鏡像。
5.非必要技術一概不要,目前快速交付需要的環境:1.docker環境;2.admin鏡像;3.node鏡像;4.mysql數據庫。
先上圖:
1.登錄

2.任務調度

3.數據集成


4.配置調度

5.數據開發 - 綁定了公共庫的數據源變為公共表,用於中間數據處理

6.數據作業 - 將離線同步和數據開發串聯作業

7.調度日志查看(進行中的任務可以暫停刷新-終止任務等非常方便)

8.Docker容器化部署,rancher平台托管,node節點可以分布式擴展,部署架構參考XXLJOB,節點之間是獨立的,統一由admin發送調度任務

以下對功能需求介紹如下:
1.執行調度(這個不多介紹了,熟悉XXLJob的同學一看就知道,還是熟悉的味道,熟悉的配方,完美復刻(好吧有改造的成分))
2.數據集成(重點,用過阿里雲DataWorks的同學能夠感受到熟悉的感覺,沒錯參考核心的幾個DataWorks操作)
2.1 離線同步 - 基礎功能
主要負責異構數據源的數據同步,目前UI上只支持關系型數據庫,設計上支持擴展,底層邏輯是,設計出DataX所需要的JSON,給到調度,調度發送給Node節點,Node節點丟給DataX去執行就好了,執行日志全部通過XxlJob的方式輸出,UI上面為了體驗友好做了改造,啟動執行立刻彈出日志窗口,增加暫停/繼續刷新和彈出窗終止任務等實用功能,體驗上單點聚合不用切換到別的地方去。
2.2 數據開發 - 基礎功能
這里重點借助公共庫表的設計,參考DataWorks思路,通常離線同步只是兩個跨數據源的庫表同步,如果需要一個中間過渡的公共庫做臨時表的數據處理,那么數據開發就是做這個事情的,可以做一些update/delete等數據清洗,集成了一個SQL編輯器,后台提供接口支持,開發好的sql腳本給到調度,調度發送給Node,Node節點直接執行發送給公共數據庫,因為是更新SQL,沒有借助DataX,直接發送到源庫執行,也可以全程借助DataX,不多說,公共庫只支持Mysql。
2.3 作業 - 高級功能
思路就是離線同步和數據開發看作是一個個單一任務,那么一個作業就是為了把一個個單一的串起來,因為有時候一個完整的數據同步可以涉及多個同步開發步驟,作業屬於一個高級功能項.
3.數據源
3.1 數據源管理
這個好理解,就是全局數據源,有的沒的加上去就能同步了。目前已支持Mysql/Oracle/Postgresql/sqlserver/達夢/hive/oceanbase/mongodb/hbase
3.2 公共表
就是公共庫表給數據開發的,只支持Mysql,需要從數據源里邊選擇一個綁定為公共庫,全局只能有一個。
4.資源分組
5.系統管理
通用的數據權限管理功能,已支持全局的數據權限過濾。
