主頁 > 資料庫 > 一文教會你用Apache SeaTunnel Zeta離線把資料從MySQL同步到StarRocks

一文教會你用Apache SeaTunnel Zeta離線把資料從MySQL同步到StarRocks

2023-05-27 07:48:43 資料庫

在上一篇文章中,我們介紹了如何下載安裝部署SeaTunnel Zeta服務(3分鐘部署SeaTunnel Zeta單節點Standalone模式環境),接下來我們介紹一下SeaTunnel支持的第一個同步場景:離線批量同步,顧名思意,離線批量同步需要用戶定義好SeaTunnel JobConfig,選擇批處理模式,作業啟動后開始同步資料,當資料同步完成后作業完成退出,

下面以MySQL離線同步到StarRocks為例,介紹如何使用SeaTunnel進行離線同步作業的定義和運行,

1. 定義作業組態檔

SeaTunnel使用組態檔來定義作業,在這個示例中,作業的組態檔如下,檔案保存路徑~/seatunnel/apache-seatunnel-incubating-2.3.1/config/mysql_to_sr.config

#定義一些作業的運行引數,具體可以參考 https://seatunnel.apache.org/docs/2.3.1/concept/JobEnvConfig
env {
	job.mode="BATCH"  #作業的運行模式,BATCH=離線批同步,STREAMING=實時同步
	job.name="SeaTunnel_Job"
	checkpoint.interval=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="Table9210050164000"
    	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`, `f_bigint`, `f_bigint_unsigned`, `f_numeric`, `f_decimal`, `f_float`, `f_double`, `f_double_precision`, `f_longtext`, `f_mediumtext`, `f_text`, `f_tinytext`, `f_varchar`, `f_date`, `f_datetime`, `f_timestamp` FROM `sr_test`.`test1`"
    	password="root@123"
    	driver="com.mysql.cj.jdbc.Driver"
    	user=root
    	url="jdbc:mysql://st01:3306/sr_test?enabledTLSProtocols=TLSv1.2&rewriteBatchedStatements=true"
	}
}
transform {
# 在本次示例中我們不需要做任務的Transform操作,所以這里為空,也可以將transform整個元素洗掉
}
sink {
	StarRocks {
    	batch_max_rows=10240 # 
    	source_table_name="Table9210050164000"
    	table="test2"
    	database="sr_test"
    	base-url="jdbc:mysql://datasource01:9030"
    	password="root"
    	username="root"
    	nodeUrls=[
        	"datasource01:8030" #寫入資料是通過StarRocks的Http介面
    	]
	}
}

2. 作業配置說明

在這個作業定義檔案中,我們通過env定義了作業的運行模式是BATCH離線批處理模式,同時定義了作業的名稱是"SeaTunnel_Job",checkpoint.interval引數用來定義該作業程序中多久進行一次checkpoint,那什么是checkpoint,以及checkpoint在Apache SeaTunnel中的作用是什么呢?

2.1 checkpoint

查看官方檔案中對Apache SeaTunnel Zeta引擎checkpoint的介紹: https://seatunnel.apache.org/docs/2.3.1/seatunnel-engine/checkpoint-storage#introduction 發現checkpoint是用來使運行在Apache SeaTunnel Zeta中的作業能定期的將自己的狀態以快照的形式保存下來,當任務意外失敗時,可以從最近一次保存的快照中恢復作業,以實作任務的失敗恢復,斷點續傳等功能,其實checkpoint的核心是分布式快照演算法:Chandy-Lamport 演算法,是廣泛應用在分布式系統,更多是分布式計算系統中的一種容錯處理理論基礎,這里不詳細介紹Chandy-Lamport 演算法,接下來我們重點說明在本示例中checkpoint對這個同步任務的影響,

Apache SeaTunnel Zeta引擎在作業啟動時會啟動一個叫CheckpointManager的執行緒,用來管理這個作業的checkpoint,SeaTunnel Connector API提供了一套checkpoint的API,用于在引擎觸發checkpoint時通知具體的Connector進行相應的處理,SeaTunnel的Source和Sink連接器都是基于SeaTunnel Connector API開發的,只是不同的連接器對checkpoint API的實作細節不同,所以能實作的功能也不同,

2.1.1 checkpoint對JDBC Source的影響

在本示例中我們通過JDBC Source連接器的官方檔案https://seatunnel.apache.org/docs/2.3.1/connector-v2/source/Jdbc 可以發現如下內容:

這說明JDBC Source連接器實作了checkpoint相關的介面,通過原始碼我們可以得知,當checkpoint發生時,JDBC Source會將自己還未處理的split做為狀態的快照發送給CheckpointManager進行持久化保存,這樣當作業失敗并恢復時,JDBC Source會從最近一次保存的快照中讀取哪些split還未處理,然后接著處理這些split,

在該作業中通過partition_num=20,會將query引數中指定的sql陳述句的結果分成20個split進行處理,每個split會生成讀取它負責的資料的sql,這個sql是由query中指定的sql再加上一些where過濾條件組成的,這20個split會被分配給5個Source Task進行處理,理想情況下,每個Source Task會分配到4個split,假設在一次checkpoint時每個Source Task都只剩下一個split沒有處理,這個split的資訊會被保存下來,如果這之后作業掛掉了,作業會自動進行恢復,恢復時每個Source Task都會獲取到那個還未處理的split,并接著進行處理,如果作業不再報錯,這些split都處理完成后,作業運行完成,如果作業還是報錯(比如目標端StarRocks掛了,無法寫入資料),最終作業會以失敗狀態結束,

斷點續傳:

如果在作業失敗后,我們修復了問題,并且希望該作業接著之前的進度運行,只處理那些之前沒有被處理過的split,可以使用 sh seatunnel.sh -r jobId來讓作業ID為jobId的作業從斷點中恢復,

回到主題,checkpoint.interval=10000對于從Mysql中讀取資料意味著每過10s,SeaTunnel Zeta引擎就會觸發一次checkpoint操作,然后JDBC Source Task會被要求將自己還未處理的split資訊保存下來,這里需求注意的是,JDBC Source Task讀取資料是以split為單位的,如果checkpoint觸發時一個split中的資料正在被讀取還未完全發送給下游的StarRocks,它會等到這個split的資料處理完成之后才會回應這次checkpoint操作,這里一定要注意,如果MySQL中的資料量比較大,一個split的資料需要很長的時候才能處理完成,可能會導致checkpoint超時,關于checkpoint的超時時長可以引數https://seatunnel.apache.org/docs/2.3.1/seatunnel-engine/checkpoint-storage, 默認是1分鐘,

2.1.2 checkpoint對StarRocks Sink的影響

在Sink連接器的檔案上,我們也能看到如下圖中的標識:

這個標識代表該Sink連接器是否實作了精確處理一次的語意,如果該標識被選中,說明這個Sink連接器能保證發給它的資料它只會往目標端寫入一次,不會漏掉導致目標端資料丟失 ,也不會重復往目標端寫入,這一功能常見的實作方式是兩階段提交,支持事務的連接器一般會先開啟事務進行資料的寫入,當checkpoint發生時,將事務ID回傳給CheckManager進行持久化,當作業中的所有Task都回應了CheckManager的checkpoint請求后,第一階段完成,然后Apache SeaTunnel Zeta引擎會呼叫AggregateCommit的方法讓Sink對其事務進行提交,這個程序被稱為第二階段,第二階段完成后該次checkpoint完成,如果第二階段提交失敗,作業會失敗,然后自動恢復,恢復后會再次從第二階段開始,要求對事務進行提交,直到該事務提交完成,如果事務一直失敗,作業也將失敗,

并不是只有實作了exactly-once特性的Sink連接器才能保證目標端的資料不丟失不重復,如果目標端的資料庫支持以主鍵去重,那只要Sink連接器保證發送給它的資料至少往目標端寫入一次,無論重復寫入多少次,最終都不會導致目標端資料丟失或重復,在該示例中StarRocks Sink連接器即是使用了這種方式,StarRocks Sink連接器會將收到的資料先快取在記憶體中,當快取的行數達到batch_max_rows設定的10240行,就會發起一次寫入請求,將資料寫入到StarRocks中,如果MySQL中的資料量很小,達不到10240行,那就會在checkpoint觸發時進行StarRocks的寫入,

3. 運行作業

我們使用Apache SeaTunnel Zeta引擎來運行該作業

cd ~/seatunnel/apache-seatunnel-incubating-2.3.1
sh bin/seatunnel.sh --config config/mysql_to_sr.config

作業運行完成后可以看到如下資訊,說明作業狀態為FINISHED,讀取20w行資料,寫入StarRocks也是20w行資料,用時6s,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/553554.html

標籤:大數據

上一篇:實體講解Spring boot動態切換資料源

下一篇:返回列表

標籤雲
其他(159804) Python(38173) JavaScript(25458) Java(18138) C(15231) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7213) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5343) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4576) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1977) 功能(1967) Web開發(1951) HtmlCss(1948) C++(1922) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1862) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • 一文教會你用Apache SeaTunnel Zeta離線把資料從MySQL同步到Star

    我們介紹一下SeaTunnel支持的第一個同步場景:離線批量同步。顧名思意,離線批量同步需要用戶定義好SeaTunnel JobConfig,選擇批處理模式,作業啟動后開始同步資料,當資料同步完成后作業完成退出。 ......

    uj5u.com 2023-05-27 07:48:43 more
  • 實體講解Spring boot動態切換資料源

    摘要:本文模擬一下在主庫查詢訂單資訊查詢不到的時候,切換資料源去歷史庫里面查詢。 本文分享自華為云社區《springboot動態切換資料源》,作者:小陳沒煩惱 。 前言 在公司的系統里,由于資料量較大,所以配置了多個資料源,它會根據用戶所在的地區去查詢那一個資料庫,這樣就產生了動態切換資料源的場景。 ......

    uj5u.com 2023-05-26 15:05:07 more
  • 2萬多條茶文化網站文章內容ACCESS資料庫

    這是從一個完整的茶文化網站采集下來的完整的內容,2萬多條的記錄數幾乎包含了關于茶資訊的所有內容,而且內容格式經過嚴謹的整理不會顯示亂七八遭而是統一干爽的格式。憑此資料庫可以創建一個內容建全的茶網站。 模塊包含:茶的種類(497)、茶具知識(139)、茶農資料(1568)、茶葉技術(3437)、茶藝茶 ......

    uj5u.com 2023-05-26 14:57:32 more
  • es筆記七之聚合操作之桶聚合和矩陣聚合

    > 本文首發于公眾號:Hunter后端 > 原文鏈接:[es筆記七之聚合操作之桶聚合和矩陣聚合](https://mp.weixin.qq.com/s/SFiLEtnUqxncL-ZQj1zqgg) 桶(bucket)聚合并不像指標(metric)聚合一樣在欄位上計算,而是會創建資料的桶,我們可以理 ......

    uj5u.com 2023-05-26 14:56:57 more
  • 快速上手kettle(一)壺之簡介

    ### 一、前言 最近由于作業需要,需要用到kettle工具進行資料遷移轉換。特意找資料學習了一下,kettle基本操作算是學會了。 所學的也結合實際作業進行了驗證。為了防止以后用到忘記了,便寫了幾篇文章記錄一下。 ![快速上手kettle](https://img2023.cnblogs.com/ ......

    uj5u.com 2023-05-26 14:56:03 more
  • Elasticsearch 之 join 關聯查詢及使用場景

    在Elasticsearch這樣的分布式系統中執行類似SQL的join連接是代價是比較大的,然而,Elasticsearch卻給我們提供了基于水平擴展的兩種連接形式 ......

    uj5u.com 2023-05-26 14:55:19 more
  • SQL Server:分頁查詢

    ## 一、分頁查詢 ? 需求描述:客戶端查詢資料庫資料并顯示在表格中。在資料庫中進行一次查詢,查詢結果有1050條記錄,但表格row上限: 100,這時需要給本次查詢記錄分配 `?` 頁用來顯示? 可以通過固定公式進行計算(c偽代碼): ```c # define TABLE_SHOW_ROW 10 ......

    uj5u.com 2023-05-26 14:55:09 more
  • 4)DML操作

    DML操作: Data Manipulation Language,資料操縱語言;包含insert、update、delete操作; 1、單行插入資料格式: insert into 表名【欄位串列】 values(值串列); 向教師表插入: insert into teacher values('0 ......

    uj5u.com 2023-05-26 14:40:52 more
  • 2萬多條茶文化網站文章內容ACCESS資料庫

    這是從一個完整的茶文化網站采集下來的完整的內容,2萬多條的記錄數幾乎包含了關于茶資訊的所有內容,而且內容格式經過嚴謹的整理不會顯示亂七八遭而是統一干爽的格式。憑此資料庫可以創建一個內容建全的茶網站。 模塊包含:茶的種類(497)、茶具知識(139)、茶農資料(1568)、茶葉技術(3437)、茶藝茶 ......

    uj5u.com 2023-05-26 14:36:16 more
  • es筆記七之聚合操作之桶聚合和矩陣聚合

    > 本文首發于公眾號:Hunter后端 > 原文鏈接:[es筆記七之聚合操作之桶聚合和矩陣聚合](https://mp.weixin.qq.com/s/SFiLEtnUqxncL-ZQj1zqgg) 桶(bucket)聚合并不像指標(metric)聚合一樣在欄位上計算,而是會創建資料的桶,我們可以理 ......

    uj5u.com 2023-05-26 14:35:59 more