Daph原始碼位於gitee,地址是https://gitee.com/dasea96/daph
概述
Daph的中文名稱是大副,大副是職位僅低於船長的船舶駕駛員,甲板部(駕駛部)負責人,船長的主要助手。
Daph的英文名稱,取自【有向無環圖Directed Acyclic Graph】的第一個字母與最後三個字母。
Daph是一個通用的資料整合與資料處理平臺級工具,可用於構建視覺化配置化的資料整合與資料處理平臺。
Daph,大道至簡。
Daph的核心概念是節點,節點具有輸入線與輸出線,每條線中承載資料,節點承載任意資料處理邏輯。
Daph的核心構件是一個自創的通用DAG資料流引擎,可以流轉任意Java/Scala資料結構,可以引入任何基於Java平臺或具有Java客戶端的資料計算元件作為資料流底層資料計算引擎。
Daph的核心功能是聯接多個節點構成DAG圖,並流轉資料。
功能
- 全量增量整庫整表資料整合:以極簡配置方式,完成全量增量整庫整表資料整合
- 已支援50多種資料來源型別的全量整表同步
- 已支援Flink-cdc所支援的所有資料來源型別的cdc整表同步
- 已支援mysql/postgresql/oracle/sqlserver/doris/starrocks到mysql/postgresql/oracle/sqlserver/doris/starrocks/hive/iceberg/kafka的全量增量整庫同步
- 流批一體複雜資料處理:以極簡配置方式,完成流批一體任意複雜多表sql處理邏輯
價值
- 統一資料開發檢視:Daph既具有豐富的資料整合能力,又具有強大的資料處理能力
- 降低資料開發門檻:透過配置檔案,完成資料開發
- 縮短資料開發週期:開箱即用的海量資料整合與資料處理能力,極簡的安裝部署方式,極簡的二次開發過程
特點
- 通用:可連線任意JVM型別的節點,構成DAG圖,並流轉任意Java/Scala資料結構。因此,不僅目前能夠用於構建DAG資料流,而且具有潛在的任意粒度的DAG任務排程的潛力,可基於一個daph-core,統一任務開發與任務排程,實現一體化的視覺化任務開發與任務排程平臺。
- 簡單:概念簡單,配置簡單
- 基於開源計算引擎,不引入新的複雜概念
- 節點配置簡單,比如daph-spark節點配置項,與Spark配置項幾乎完全一致,不增加學習開銷。
- 強大:架構強大,功能強大
- 架構層面具有多層環繞執行體系,可定製任意Job級/DAG級/節點級/方法級功能,比如節點資料預覽功能、節點監控功能、前置後置SQL功能。目前所有節點均已支援前置後置建表功能,daph-spark所有節點已支援前置後置SQL功能
- daph-spark僅有5個聯結器、6個轉換器,卻已支援44種資料來源的流批讀寫,且能隨時擴充更多資料來源;已支援對單表的map、filter、sql處理,對多表的join及任意複雜sql處理;且支援spark能支援的任何catalog
- daph-flink僅有2個聯結器、1個轉換器,卻已支援任何flink-sql支援的資料來源的流批讀寫;已支援對單表與多表的任意複雜sql處理;且支援flink能支援的任何catalog。
- 聚焦:聚焦於視覺化配置化的資料整合與資料處理,聚焦於簡化開源計算引擎的使用,不增加學習開銷。
- 流轉任意資料結構:可流轉任意JVM資料結構,比如Java/Scala List、Spark DataFrame、Flink DataStream。
- 支援多種計算引擎:可引入任何基於Java平臺或具有Java客戶端的資料計算元件作為資料流底層資料計算引擎,比如Java/Scala/Spark/Flink,等等。
- 快速擴充套件節點:可方便地擴充套件與部署具有任意邏輯的節點,比如擴充套件新的聯結器節點,以支援讀寫新的資料庫型別;比如擴充套件新的轉換器節點,以便引入特定資料處理邏輯處理資料。只需要完成以下三點,即可完成:
1)實現一個配置介面與一個功能介面
2)將擴充套件的節點對應的jar放在伺服器目錄
3)json檔案中配置擴充套件節點資訊
對比業界類似軟體
Daph:
- 既能用於資料整合,又能用於複雜的資料處理
- 極致通用的DAG模型,能夠流轉任意JVM物件,引入任意符合Spark/Flink程式設計模型的計算引擎
- 不重複造輪子,專注於簡化開源計算引擎的使用,配置項幾乎與開源計算引擎一一對應
- 完美運用開源計算引擎的各項能力,包括且不限於流批處理能力、catalog能力、sql能力
- 能夠及時從開源計算引擎的生態系統中獲益
- 比如Spark,一旦新出現一種資料庫聯結器,在Daph中只需要在pom.xml中新增依賴,就能立刻使用
對比維度 | Daph | SeaTunnel | StreamSets | StreamX | Kettle | Chunjun |
---|---|---|---|---|---|---|
通用性 | 高 | 低 | 低 | 低 | 低 | 低 |
易用性 | 高 | 中 | 高 | 高 | 高 | 中 |
開源 | 是 | 是 | 否 | 是 | 是 | 是 |
資料結構流轉能力 | 所有JVM物件 | Dataset[Row]/DataStream[Row]/Zeta資料結構 | 無 | 無 | 無 | 無 |
計算引擎接入能力 | 任意符合Spark/Flink程式設計模型的計算引擎 | Spark/Flink/Zeta | Spark | Spark/Flink | Java | Flink |
流水線模型 | DAG | 線 | DAG | 點 | DAG | 線 |
功能擴充套件性 | 高 | 中 | 低 | 中 | 低 | 中 |
學習成本 | 低 | 高 | 高 | 中 | 中 | 中 |
開發成本 | 低 | 高 | 高 | 中 | 高 | 中 |
運維成本 | 低 | 高 | 低 | 中 | 低 | 中 |
架構模型
資料流模型
Daph的資料流模型是DAG資料流模型,如下圖所示:
例如一個資料整合與資料處理綜合場景,如下圖所示:
- 輸入是一張MySQL表、一張Hive表,一張Oracle表
- 處理邏輯包含map、join、sql、自定義複雜邏輯
- 輸出是一個Hudi表、一個Doris表、一個HBase表
執行模型
Daph透過節點包裹程式碼片段,將節點連成一個DAG圖,並最終將DAG圖形成一個完整的應用程式。
- 一個DAG圖就是一個完整執行邏輯,比如當使用Spark作為底層計算引擎,一個DAG圖就是一個完整的Spark應用程式。
- 一個DAG圖中可以同時包含Java節點、Scala節點、Spark節點,也可以同時包含Java節點、Scala節點、Flink節點,但不能同時包含Spark與Flink節點。
- 底層計算引擎決定了應用程式的型別。
JVM引擎對應的就是原生Java/Scala應用程式;
Spark引擎對應的就是Spark應用程式;
Flink引擎對應的就是Flink應用程式。
Daph執行模型如下圖所示:
部署模型
Daph目前的部署模型非常簡單,
- daph-jvm,就是部署原生java程式
- daph-spark,就是部署spark應用程式
- daph-flink,就是部署flink應用程式