《白鯨開源 代立冬-基于 Apache SeaTunnel 實現超高性能數據同步.pdf》由會員分享,可在線閱讀,更多相關《白鯨開源 代立冬-基于 Apache SeaTunnel 實現超高性能數據同步.pdf(40頁珍藏版)》請在三個皮匠報告上搜索。
1、基于基于 Apache SeaTunnel 實現超高性能數據同步實現超高性能數據同步代立冬代立冬(David)(David)ApacheApache SeaTunnelSeaTunnel PMCPMC ApacheApache DolphinSchedulerDolphinScheduler PMCPMC ChairChair白鯨開源聯合創始人白鯨開源聯合創始人Apache 基金會正式成員Apache 孵化器導師Apache SeaTunnel PMCApache DolphinScheduler PMC ChairTrack Chair of BigData of ApacheCon Asi
2、a 2021/2022/2023代立冬(David Zollo)0101數據數據集成的痛點集成的痛點0202SeaTunnelSeaTunnel 功能與架構功能與架構0303用戶用戶案例案例目錄目錄 CONTENTCONTENT0404RoadmapRoadmap0101數據數據集成的痛點集成的痛點數據源多達幾百種,版本間不兼容,而且不斷有新的出現頻繁讀取 binlog 對數據源端影響大大事務、Schema 變更影響下游低吞吐高時延導致數據無法及時到達離線同步和實時同步常被分開管理,維護困難數據割接人工進行數據丟失與重復,無法一致性出現問題無法回滾或者斷點繼續執行同步過程不透明,缺少監控企業數
3、據集成面臨的問題企業數據集成面臨的問題6Apache Apache SeaTunnelSeaTunnel 簡介簡介2023 年 6 月 1 日正式成為 Apache 頂級項目。首個國人主導的數據集成項目每天可以穩定高效同步萬億級數據,已在數百家公司生產上使用Next-generation high-performance,distributed,massive data integration tool0202SeaTunnelSeaTunnel 功能與架構功能與架構無中心化設計確保系統無中心化設計確保系統的高可用,支持多云的高可用,支持多云支持每日萬億級數據量支持每日萬億級數據量同步同步簡單
4、易用,開箱即用,不依簡單易用,開箱即用,不依賴賴 HDFSHDFS,FlinkFlink,SparkSpark全可視化操作全可視化操作存算分離架構設計存算分離架構設計高性能數據同步高性能數據同步支持節點動態伸縮支持節點動態伸縮全量到增量無鎖化自動切換全量到增量無鎖化自動切換讀緩沖讀緩沖(一個源到多個目標數據一個源到多個目標數據源,只用一次讀取源,只用一次讀取)動態速率控制,對源端和目標端動態速率控制,對源端和目標端壓力可控壓力可控支持支持 SchemaSchema EvolutionEvolution斷點續傳斷點續傳實現實現 Exactly-OnceExactly-Once 一次語義,一次語義
5、,保證數據一致性保證數據一致性云組件支持云組件支持K8sK8s 支持支持AWS RedshiftAWS Redshift、S3,RDS,DynamoDBS3,RDS,DynamoDB阿里阿里 OSS FileOSS File,TableStoreTableStore 等等批流批流 、實時、實時、CDCCDC一體一體化配置化配置無主鍵增量數據集成無主鍵增量數據集成整庫同步、表結構自動變整庫同步、表結構自動變更更豐富的數據源支持,目豐富的數據源支持,目前已經支持前已經支持 100+100+種數種數據源據源SeaTunnel 核心功能與目標9 SeaTunnel:下一代實時多源數據同步工具.上百種數
6、據源上百種數據源數據同步與集成數據同步與集成目標數據目標數據源源原有解決方案原有解決方案Sea TunnelSeaTunnelUniversal APISeaTunnelEngine 批量數據全量、增量集成 實時數據集成 批量無主鍵增量集成等Table APISource APIEngine APISink API100+接口數量接口數量3x版本迭代版本迭代500+%接口數增長接口數增長MySQLPostgreSQLKafkaMongoDBElasticTiDBDruidRedisHiveHudiKuduHBaseMySQLMongoDBOracleHudiInfluxDBPostgreSQL
7、ElasticRedisDorisNeo4jKafkaTiDBHiveHBaseFeishu其他解決方案其他解決方案FacebookGoogle AdsHubSpotSalesforceAirtableClickhouseSeaTunnel性能快性能快30%SeaTunnel性能快性能快30倍倍DataX10 SeaTunnel 架構Apache SeaTunnel 設計核心理念SeaTunnel 設計的核心是將數據處理的各種行為抽象成 Plugin,主要概括為以下兩點:1.上層不依賴底層,兩者都依賴抽象2.流程代碼與業務邏輯應該分離對于整個數據處理過程,大致可以分為以下幾個流程:輸入輸入-轉
8、換轉換-輸出輸出,對于更復雜的數據處理,實質上也是這幾種行為的組合:sourcetransformsinkSeaTunnel 運行流程Apache SeaTunnel 架構特性架構特性多版本、多引擎支持支持多個版本的Flink引擎,完美支持Flink的Checkpoint流程Flink支持Spark微批處理模式,支持聚合提交特性Spark專為數據同步場景設計的引擎,還在開發中。SeaTunnel內部引擎,為那些沒有大數據生態的企業或追求數據同步最佳體驗的用戶提供可選方案SeaTunnel ZetaSeaTunnelConnectorSparkTranslationFlinkTranslatio
9、nSparkConnectorFlinkConnectorImplementing based on SeaTunnel Connector API基于基于 Spark Connector API 將將 SeaTunnel API實現的實現的 Connector 包裝成包裝成 Spark Connector基于基于 Flink Connector API 將將 SeaTunnel API實現的實現的 Connector 包裝成包裝成 Flink Connector運行在運行在 Spark 上面上面的的 Connector 內部實現內部實現從從 SeaTunnel Row 轉換成轉換成 Spar
10、k 數據結構數據結構接口接口運行在運行在 Flink上面上面的的 Connector 內部實現內部實現從從 SeaTunnel Row 轉換成轉換成 Flink 數據結構數據結構接口接口SeaTunnel Translation Layer我們為什么能支持 Spark,Flink,or Zeta 作為 runtime engines?15 SeaTunnel Zeta Engine解決Flink/Spark同步集成引擎痛點問題回滾容錯回滾容錯容錯粒度大容錯粒度大進行多表同步時,Flink/Spark任何表出現問題都會導致整個作業失敗停止,導致所有表同步延遲多方式確保一致性多方式確保一致性支持無
11、中心HA和更細粒度的作業回滾機制,結合多階段提交與CheckPoint機制,確保數據一致的同時避免大量回滾導致性能下降Spark Spark FlinkFlinkSeaTunnel Zeta引擎引擎資源把控資源把控資源浪費嚴重資源浪費嚴重每個作業只能同步一張表,多張表同步需要啟動多個Job運行,造成巨大浪費資源易用省資源易用省資源Zeta引擎的Dynamic Thread Sharing技術可提高CPU利用率,不依賴HDFS,Spark等復雜組件,具備更好單機處理性能多表同步多表同步JDBCJDBC連接數過多連接數過多每個task只能處理一張表,每張表至少需要一個JDBC連接來讀取或寫入數據。
12、當進行多表同步和整庫同步時,需要大量的JDBC連接極致極致CDC&批量性能批量性能支持多表或整庫同步,解決JDBC連接過多的問題;實現 zero-copy 技術,無需序列化開銷,列式內存格式增加大吞吐CDC場景場景不支持數據緩存與表結構變更不支持數據緩存與表結構變更CDC場景下易出現源端數據庫日志被清除的情況,同時目前Datax/Spark/Flink/FlinkCDC都無法支持DDL變更的檢測和下游應用非常重要多復用多復用/數據庫日志多表解析數據庫日志多表解析支持多表或整庫數據庫日志讀取解析,解決CDC多表同步場景下需要重復解析日志的問題靈活復用靈活復用開發與運維困難開發與運維困難需要投入的
13、人力完成安裝、運維,保證正常運轉;同時需要投入較多開發人員編程實現各種復雜的業務計算快速開發與運維快速開發與運維SeaTunnel 幫助用戶快速建立單表多字段、多表多字段、SaaS和非結構化到數據庫等復雜的數據集成任務并監控流批一體流批一體統一了流和批的處理 API,新的 Connector 只需要按 API 實現一次,即可同時支持流處理和批處理下的數據集成。03JDBC多復用多復用/數據庫日志多表解析數據庫日志多表解析支持多表或整庫同步,解決 JDBC 連接過多的問題;支持多表或整庫數據庫日志讀取解析,解決 CDC 多表同步場景下需要重復解析日志問題。04與引擎解藕,支持與引擎解藕,支持 F
14、link、Spark、Zeta作作為運行時,專為數據集成場景設計為運行時,專為數據集成場景設計.多引擎支持多引擎支持定義一套 SeaTunnel自己的 API,不依賴具體的執行引擎,實現一套代碼可在不同的引擎上執行。01多版本支持多版本支持通過 Translation 層將 Connector 與引擎解藕,解決以往為了支持底層引擎一個新的版本,大部分Connector都需要修改代碼的問題。02與引擎解藕的架構設計SeaTunnel Source APISeaTunnel Transform APISeaTunnel Sink APISeaTunnel Checkpoint APISeaTunn
15、el Translation APISeaTunnel 連接器 Source Api SeaTunnel 連接器 Sink Api SeaTunnel Core Engine 細節 Source 端KeywordSource特性特性KeywordSource API統一統一批量批量與實時與實時支持并行讀取支持并行讀取支持動態發現分片支持動態發現分片支持協調讀取支持協調讀取支持狀態存儲、恢復支持狀態存儲、恢復BoundednessSourceReader&Source SplitSource Split&EnumeratorSupportCoordinate&SourceEventsnapsho
16、tStateSeaTunnel Core Engine 細節-Coordinator 1.無中心化的 Coordinator 并行協調器2.支持多并發任務配合配合 Source 支持支持 Exactly-Once 一次語義一次語義Sink Write接收上游數據并寫入目標端State儲存儲存支持狀態存儲,由 connector將狀態存儲在 磁盤或HDFS,支持基于狀態重啟 connector分布式事務分布式事務支持兩階段提交的分布式事務,配合引擎的 checkpoint 機制,保證 Sink 數據只寫一次Commiter支持每個 Task 獨立進行事務提交聚合提交聚合提交支持所有 Sink T
17、ask 一起聚合提交Sink APISeaTunnel Zeta 引擎不需要依賴三方組件,不依賴大數據平臺無主(自選主)WAL,整個集群重啟也可恢復之前正在運行的作業支持分布式快照算法,保障數據一致性SeaTunnel Zeta 性能對比本地測試場景:MySQL-Hive,Postgres-Hive,SQLServer-Hive,Orache-Hive云測試場景:MySQL-S3列數:32,基本包含大部分數據類型行數:3000w 行Hive 文件 text 格式 18G測試節點:單機 8C16G本地測試:SeaTunnel Zeta VS DataXSeaTunnel Zeta 比 DataX
18、 同步數據快 30-50%左右。內存對 SeaTunnel Zeta 的性能沒有影響。云數據同步:SeaTunnel 在 MySQL 到 S3 場景下性能是 Airbyte 的 30 多倍,是 AWS DMS 和 Glue 的 2 到 5 倍。SeaTunnel 現狀-數據源量支持的數據源有 100+種Apache SeaTunnel vs 相關產品對比項對比項Apache SeaTunnelDataXApache SqoopApache Flume部署難度部署難度容易容易十分復雜,嚴重依賴 Hadoop 體系容易運行模式運行模式分布式,也支持單機單機本身不是分布式框架,依賴 Hadoop M
19、R 實現分布式 分布式,也支持單機健壯的容錯機制健壯的容錯機制無中心化的高可用架構設計,有完善的容錯機制易受比如網絡閃斷、數據源不穩定等因素影響MR 模式重,出錯處理麻煩一般支持的數據源豐富度支持的數據源豐富度支持 MySQL、PostgreSQL、Oracle、SQLServer、S3、RedShift、HBase、Clickhouse、Hive等過 100 種數據源支持 MySQL、ODPS、PostgreSQL、Oracle、Hive 等 20+種數據源僅支持 MySQL、Oracle、DB2、Hive、HBase、S3 等幾種數據源支持 Kafka、File、HTTP、Avro、HDF
20、S、Hive、HBase等幾種數據源自動建表自動建表支持不支持不支持不支持整庫同步整庫同步支持不支持不支持不支持斷點續傳斷點續傳支持不支持不支持不支持多引擎支持多引擎支持支持 SeaTunnel Zeta、Flink、Spark 3 個引擎選其一作為運行時只能跑在 DataX 自己引擎上自身無引擎,需跑在 Hadoop MR 上,任務啟動速度非常慢支持 Flume 自身引擎數據轉換數據轉換(Transform)Transform)支持 Copy、Filter、Replace、Split、SQL、自定義 UDF 等算子支持補全,過濾等算子只有列映射、數據類型轉換和數據過濾基本算子只支持 Inte
21、rceptor 方式簡單轉換操作單機性能單機性能比 DataX 高 20%-50%較好一般一般離線同步離線同步支持支持支持支持增量同步增量同步支持支持支持支持實時同步實時同步支持不支持不支持支持CDCCDC同步同步支持不支持不支持不支持批流一體批流一體支持不支持不支持不支持精確一致性精確一致性MySQL、Kafka、Hive、HDFS、File 等連接器支持不支持不支持不支持,提供一定程度的一致性可擴展性可擴展性插件機制非常易擴展易擴展擴展性有限,Sqoop主要用于將數據在Apache Hadoop和關系型數據庫之間傳輸易擴展統計信息統計信息有有無有Web UIWeb UI正在實現中(拖拉拽即
22、可完成)無無無與調度系統集成度與調度系統集成度已經與 DolphinScheduler 集成,后續也會支持其他調度系統不支持 不支持不支持社區社區非?;钴S非常不活躍已經從 Apache 退役不活躍SeaTunnel 使用方式非常簡單 Fake-Consolecd/seatunnel/apache-seatunnel-2.3.2sh bin/seatunnel.sh-config./config/v2.batch.config.template-e local3 分鐘入門案例參考:https:/ job.mode=BATCHsource FakeSource parallelism=2 resu
23、lt_table_name=fakerow.num=16schema=fields name=stringage=intsink Console 安裝與啟動安裝與啟動啟動spark:bin/start-seatunnel-spark.sh -c config-path -m master -e deploy-mode -i city=beijing啟動flinkbin/start-seatunnel-flink.sh -c config-path -i key=value -r run-application other paramsexport version=2.3.0-betawget
24、https:/archive.apache.org/dist/incubator/seatunnel/$version/apache-seatunnel-incubating-$version-bin.tar.gztar-xzvf apache-seatunnel-incubating-$version-bin.tar.gzSeaTunnel 使用方式非常簡單 MySQL-Doris#定義一些作業的運行參數env job.mode=“BATCH”#作業的運行模式,BATCH=離線批同步,STREAMING=實時同步 job.name=“SeaTunnel_Job”checkpoint.inte
25、rval=10000#每10000ms進行一次checkpoint,后面會詳細介紹checkpoint對JDBC Source和StarRocks Sink這兩個連接器的影響source Jdbc parallelism=5#并行度,這里是啟動5個Source Task來并行的讀取數據 partition_column=“id”#使用id字段來進行split的拆分,目前只支持數字類型的主鍵列,而且該列的值最好是離線的,自增id最佳 partition_num=“20”#拆分成20個split,這20個split會被分配給5個Source Task來處理 result_table_name=“T
26、able9210050164000”query=“SELECT id,f_binary,f_blob,f_long_varbinary,f_longblob,f_tinyblob,f_varbinary,f_smallint,f_smallint_unsigned,f_mediumint,f_mediumint_unsigned,f_int,f_int_unsigned,f_integer,f_integer_unsigned FROM sr_test.test1”password=“root123”driver=“com.mysql.cj.jdbc.Driver”user=root url=
27、“jdbc:mysql:/st01:3306/sr_test?enabledTLSProtocols=TLSv1.2&rewriteBatchedStatements=true”sink Doris fenodes=e2e_dorisdb:8030 username=root password=table.identifier=test.e2e_table_sink sink.enable-2pc=true sink.label-prefix=test_csv doris.config=format=csv column_separator=,0303用戶用戶案例案例30 SeaTunnel
28、典型案例多源數據高頻出入數據倉庫多源數據高頻出入數據倉庫異構數據實時數據同步異構數據實時數據同步解決多數據源數據每日出入數據庫以及每日出入倉同步數據問題,數據集群規模幾十臺,日均記錄數上千億上千億,日均數據量在 100T100T 以上。解決從 MySql,日志文件、Presto、Kafka、Spark、ClickHouse 以及 Hudi 之間數據同步問題,覆蓋數十臺集群。31SeaTunnel 在嗶哩嗶哩的落地實踐32SeaTunnel 在嗶哩嗶哩的落地實踐0404SeaTunnelSeaTunnel RoadmapRoadmapSeaTunnel 發展歷程項目發展歷程與規劃項目發展歷程與規
29、劃20172021.112021.122022.032022.102022.11 首個首個 Apache 版版本發布本發布進入進入Apache孵孵化器并更名為化器并更名為SeaTunnel發布版本發布版本 30+騰訊騰訊、新浪、新浪、等上百家企業等上百家企業生產使用生產使用開源 Waterdrop新一代數據同步引擎Zeta 發布發布第一個重大版發布第一個重大版本本 2.2.0,實現跨引,實現跨引擎的連接器支持擎的連接器支持支持支持CDC同步,同步,連接器個數突破連接器個數突破100+2022.122023-5支持支持Flink15/Spark3Zeta引擎支持引擎支持CDC整庫同步整庫同步和多
30、表同步和多表同步支持支持Schema evolution支持自動建表支持自動建表更快、更好用更快、更好用作為一個數據集成平臺,SeaTunnel將不斷專注于解決數據集成領域的需求和問題。持續從數據源的數量、數據同步的性能和易用性上滿足用戶的需求。連接器豐富連接器豐富 數據源向量數據庫 發布發布 SeaTunnelSeaTunnel WebWeb 可視化作業管理 編程式和引導式作業配置。內部調度+三方調度CDCCDC 支持支持 DDLDDL 變更變更流速控制流速控制SeaTunnel RoadmapK8SK8S 支持支持歡迎參與 SeaTunnel 社區貢獻 尋找你感興趣的 issuehttps:/ 參考貢獻指南https:/ 連接器極簡開發流程】https:/ API Connector 開發解析】https:/ 與 Sink API 設計解析】參與討論&尋求幫助在郵件列表、Slack 中討論通過微信群溝通(如果沒有加入請關注 SeaTunnel 公眾號入群)參與 PR Review 發表你的見解0505SeaTunnelSeaTunnel 相關資源相關資源38 SeaTunnel 相關資源官網:https:/seatunnel.apache.orgGitHub:https:/ 站:https:/