外网数据同步到内网方案_Hive To AnalyticDB 数据同步方案设计

本文分享了一种将数仓DWS层数据同步到AnalyticDB MySQL的解决方案,采用Airflow任务动态生成,保证扩展性、低延迟和高容错。通过多线程读写、数据分片、调整DAG执行频率等策略优化同步效率,并利用Airflow的task_instance确保任务正确执行,实现不漏跑、不重复跑。面临的问题包括同步任务过多时,Hive和Airflow worker可能成为瓶颈。
摘要由CSDN通过智能技术生成

最近在做同步数仓数据的工作,从设计到实现整个过程其实是挺有意思的。这里记录和分享一下我们的实施方案,也能给有类似需求的同学提供一些参考价值。

需求

在调研了阿里云的 AnalyticDB MySQL 后,我们决定把业务系统使用 Presto 查询 Hive 数据的过程替换成业直接查询 ADB(文中 ADB 都指的是 AnalyticDB MySQL)。具体原因这里就不做展开,简单说三点就是第一解耦我们目前业务直接依赖 EMR, 第二是性能上有很好的提升, 第三点用钱买服务省心。

所以简单来说我们需要把数仓 DWS 层的数据同步到 ADB。

目标

在明确了需求后,数仓数据同步的任务需要达到以下目标

  • 扩展性高
    新建的表或者删除表都不需要改动同步逻辑,或者其他代码
  • 延时低
    数仓的数据生产完毕或者更新完毕,相关的表就能开始同步
  • 容错率高
    不会出现漏同步,或者重复同步

方案设计

为了达到上述的目标,数据同步的主要流程如下

46cba02a2075df42e844b353ce321ab3.png

首先我们的同步任务最终执行的形式是 Airflow 中的一个 task,各个不同表的同步任务组成了 Airflow 中的一个 dag。

扩展性

为了达到扩展性的要求,我们把需要同步的 table 和他的依赖 task 以及一些别的信息存入 mysql 表中(表名 sync_task)。上面提到的 dag 就是根据 sync_task 的有效记录动态生成的。所以无论新建同步任务或者删除同步任务,只需要更新 sync_task, 那么 dag 也会动态调整。

dag 示例代码如下

# 读取同步记录sync_tasks = get_mysql_dataset(        mysql_conn_id="mysql_metadata",        schema="metadata",        sql=f"select * from sync_task where status = 1",    )# 生成 dag 里的同步 taskfo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值