请教一下各位佬,关于 ETL 落地技术方案的讨论

49 天前
 liangcj
背景:客户的数据源有多种,且现有存量数据在 6 亿级别,我需要同步它的数据到我这边的物理表,理想的是,首次全量同步,而后增量实时同步。

现状 demo 方案:拿 mysql 来举例:
已经实现了 mysql -> flink cdc -> kafka -> mysql
基于 400w 的数据量,监测到任务启动那会,对客户的表 mysql-source cpu 骤然爬升 20%+。

现在顾虑:
1. 6 亿的数据量,到时候直接全量同步会对客户的数据库造成很大压力,说不定会搞崩。
2. 也调研过 datax ,但是如果使用这个估计就是按照 id 每日分批跑,跑完还得衔接 flink cdc 实现流数据的同步。
3. 使用 flink cdc 需要开启 binlog 权限,可能客户不愿接受这点要求。
4. ld 现在可接受不是实时同步,唯一要求就是不能对客户数据库造成压力。

各位佬,有其他更好的方案说说嘛?感谢!
1876 次点击
所在节点    程序员
19 条回复
Fastmail
49 天前
flink cdc 我记得可以 source 和 sink 可以控制 batchsize ,包括 channel 也可以控制 transactionCapacity
只要减少传递的 event 条数应该就可以吧
flmn
49 天前
客户这个库,就没个从库么?
Fastmail
49 天前
datax 其实也可以控制并发以及并行处理的记录数和字节数,可以搜搜,具体记不清了
liangcj
49 天前
@flmn 因为客户是不确定因素,所以只能往最坏结果想,就当没有。
weenhall5
49 天前
存量数据可以分批跑,考虑后续数据如何可持续
liangcj
49 天前
@Fastmail 是有的,我上面 400w 就是设置了这些参数,10min 中跑完。cpu 爬升 20+。datax 也是可以设置并发量和处理记录、字节数。就是担心量太大了,还是会对客户有影响,而且 datax 是单机的,不支持分布式。
liangcj
49 天前
@weenhall5 现在也是这样考虑,就是分批跑,这个用什么方案比较好点。
yb2313
49 天前
要求无压力就只能慢慢传吧, 在小小的数据库里挖呀挖呀挖
fruitmonster
49 天前
@liangcj #6 那就再拉长呗,10 分钟,CPU 爬升 20+,那就 20 分钟、30 分钟、40 分钟,反正只全量这一次
beihanggmj
49 天前
分批次慢慢导出数据,用时间换算力。方案有很多,比如设置一个秒级别的 crontab 任务,一秒导出 1 万条这样的形式,时间间隔和单次 batch_size 可以按时间交付时间/需求设置具体的变量满足客户要求。
aarones
49 天前
按照需要,一个任务只跑几个库或者几个表就行了,这点数据没多少,找个凌晨 3 点跑一下就完事
min
49 天前
参数设置好,100 分钟跑完就无压力咯
cccssss
49 天前
去客户机房硬盘对拷一份,然后跑增量
glacer
49 天前
如果不开 binlog ,实时同步基本就做不了了。
只能分批次在深夜启动任务做全量同步,全量结束后,同样在深夜拉最新一天的数据做日增量即可。
cloudzhou
49 天前
你这个应该要确定下方案先,尤其是否 binlog ,这个方案就差别很大了
haimianbihdata
49 天前
不开 binlog ,实时很难搞。后续敲定了什么方案
coderYang
49 天前
能否先 mysqldump 一份数据下来进行消费,同时记录时间点,新数据则通过 binlog 来实现呢? 消费 binlog 文件不会对 mysql 有啥影响吧
liangcj
49 天前
@coderYang dump 的时候也会对客户的数据库造成很大压力。我本地 dump 自己的 6 亿条数据,cpu 骤然爬升 80%+,而且我本地还是没有其他业务操作。
Grand
48 天前
没有 binlog 感觉只能业务上双写,但是双写就不能保持数据一致性。只能说服客户开启 binlog

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1149845

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX