Apache Flink 和 Paimon 在自如数据集成场景中的使用

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: Apache Flink 和 Paimon 在自如数据集成场景中的使用

业务背景


自如目前线上有基于 Hive 的离线数仓和基于 Flink、Kafka 的实时数仓,随着业务发展,我们也在探索引入湖仓一体的架构更好的支持业务,我们对比了 Iceberg、Hudi、Paimon 后,最终选择 Paimon 作为我们湖仓一体的存储引擎,本文分享下自如在引入 Paimon 做数据集成的一些探索实践。

一、原始接入


自如目前使用的业务库入 hive 的简略逻辑图如下(拿 Mysql 举例)

通过 hive jdbc handler 每天一个快照拉取数据到 hive,如果需要更高新鲜度的业务场景,使用 canal 把数据接入 kafka,然后通过 flink 写入 hdfs,再通过 hive merge 方式合并获得最高 10 分钟延迟新鲜度的数据。这个架构运行起来有几个问题:

  1. 基于 hive jdbc handler 拉取数据每天都是一个全量业务库数据,表比较大的情况下,对业务库压力比较大,如果增量拉取也需要业务线增加 lastmodified 字段,业务不见得愿意配合修改,分库分表场景支持起来也比较繁琐
  2. 基于 canal 的准实时线由于链路比较长,出现问题后也比较难排查

引入 paimon 之后数据接入的简略逻辑图如下

在整合 paimon 到大数据平台后,我们对数据接入流程进行了很大简化。具体来说,hive ods 层的数据来源已经从原来的原始业务表迁移到了 paimon 表。在我们的T+1离线分析场景中,仍然使用 hive ods 表;而对于需要实时数据的场景,则直接查询paimon 表。这种做法的一个显著优点是,夜间的批处理作业不再因为从原始业务数据库拉取数据而遭受延误。我们还向社区贡献了 “mongo入paimon” 的实现方案,以支持 mongodb 数据源到paimon的数据同步https://cwiki.apache.org/confluence/display/PAIMON/PIP-7%3A+SyncAction+based+on+MongoDB尽管paimon提供了显著的效率提升,但我们仍然保持使用 hive ods 表,而没有直接以 paimon 表替代它们。主要原因包括:查询语法的一致性:为了确保上层查询逻辑不受影响,我们需要维持 paimon 的标签(tag)查询和 Hive 的分区查询在语法上的一致性。这样做可以避免对现有大量 ETL任务进行修改。历史数据的动态路由:在查询 paimon 的标签时,如果数据属于历史的 hive 分区数据,我们还需要实现一个动态路由机制,以确保查询能够正确地指向这些历史数据。为了进一步优化这个流程,我们计划在未来和社区一起解决上述两个问题。这将进一步简化数据架构,提供更加灵活和高效的数据查询能力。

二、打宽接入


paimon 中的数据接入直接打宽的实现使我们比较感兴趣的,但是 paimon 中目前只支持主键打宽,不支持外键打宽,实际业务场景中很多都涉及外键打宽,对于这个场景我们做了自己的一个实现, 外键打宽涉及的核心问题是主外键关系的存储,我们把这个关系存储到外置的存储(比如 redis 或者 Mysql)中。举例来说宽表构建逻辑如下:

如上图  A、B、C 三张表需要打宽按照主键m 进行打宽,A、B两张表都有主键m,但是C没有,C表和B表用n字段关联。


如上图,如果A表或者B表中来了一条数据,直接在flink中 lookup join 关联A、B、C三张表,写入到下游宽表中(paimon 或者 clickhouse)。 如上图所示,如果C表来了一条数据,需要从B表和C表的关系表中,查询到C表这条数据的变更涉及到多少主键m的变更,然后把影响到的主键m值全部重新再关联一遍写入到下游表。



如上图所示,实际业务场景中是A、B、C三张表都会发生变化,就需要把所有表的变化影响到多少主键m变更都记录下来,并且重新关联写入下游宽表,相当于进行一个“暴力计算”。这里我们用的是 flink lookup join,  A、B、C都是维表,那 flink lookup join 的流表是哪个?其实这里我们构建了一个“虚拟流表”,这个流表只有一个字段就是主键m, A、B、C表的任何变更,涉及到多少的主键m的变更,都实时写入到这个虚拟流表中,这个虚拟流表可以用 kafka 或者 paimon 作为载体实现。
简单的逻辑如上面所述,实际真正使用的时候还会涉及业务的A、B、C源表并不能直接lookup join,还需要构建对应的镜像表、构建外键索引表。具体的代码实现可以看下面的全部基于mysql实现的简化版本的一个例子https://github.com/CNDPP/widetable/tree/main 代码中的例子是三张mysql表按照bus_opp_num字段打宽写入一张mysql表,从这个简化例子可以了解具体实现的细节。

三、下一步规划


1、原始表接入中使用 paimon tag 替换掉目前的 hive 分区,减少 hdfs 空间占用

2、paimon 社区规划中也有支持外键打宽的规划,跟随社区引入测试使用

3、把 paimon 引入到后续的数仓 ETL 加工之中,利用湖上的 zorder 等特性加速离线跑批在落地 paimon 实践的过程中,深切的感受到了 paimon 社区的活跃和热情,之信老师给我们非常多的耐心指导,帮助我们在生产环境中快速落地,感谢 paimon 社区,祝福 paimon 越来越好!

相关实践学习
数据库实验室挑战任务-初级任务
本场景介绍如何开通属于你的免费云数据库,在RDS-MySQL中完成对学生成绩的详情查询,执行指定类型SQL。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
24天前
|
存储 运维 关系型数据库
探索 Apache Paimon 在阿里智能引擎的应用场景
本文整理自Apache Yarn && Flink Contributor,阿里巴巴智能引擎事业部技术专家王伟骏(鸿历)老师在 5月16日 Streaming Lakehouse Meetup · Online 上的分享。
24487 28
探索 Apache Paimon 在阿里智能引擎的应用场景
|
8天前
|
SQL JSON 缓存
玳数科技集成 Flink CDC 3.0 的实践
本文投稿自玳数科技工程师杨槐老师,介绍了 Flink CDC 3.0 与 ChunJun 框架在玳数科技的集成实践。
383 7
玳数科技集成 Flink CDC 3.0 的实践
|
15天前
|
关系型数据库 API Apache
Flink CDC:基于 Apache Flink 的流式数据集成框架
本文整理自阿里云 Flink SQL 团队研发工程师于喜千(yux)在 SECon 全球软件工程技术大会中数据集成专场沙龙的分享。
17398 11
Flink CDC:基于 Apache Flink 的流式数据集成框架
|
10天前
|
SQL Java 数据库
实时计算 Flink版产品使用问题之Spring Boot集成Flink可以通过什么方式实现通过接口启动和关闭Flink程序
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
10天前
|
SQL 分布式计算 关系型数据库
实时计算 Flink版产品使用问题之在使用FlinkCDC与PostgreSQL进行集成时,该如何配置参数
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
实时计算 Flink版产品使用问题之在使用FlinkCDC与PostgreSQL进行集成时,该如何配置参数
|
10天前
|
Prometheus Cloud Native 关系型数据库
实时计算 Flink版操作报错合集之实时计算 Flink版操作报错合集之当从保存点恢复并添加新的表时,出现了org.apache.flink.util.FlinkRuntimeException异常,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
消息中间件 分布式计算 Kafka
深度分析:Apache Flink及其在大数据处理中的应用
Apache Flink是低延迟、高吞吐量的流处理框架,以其状态管理和事件时间处理能力脱颖而出。与Apache Spark Streaming相比,Flink在实时性上更强,但Spark生态系统更丰富。Apache Storm在低延迟上有优势,而Kafka Streams适合轻量级流处理。选型考虑延迟、状态管理、生态系统和运维成本。Flink适用于实时数据分析、复杂事件处理等场景,使用时注意资源配置、状态管理和窗口操作的优化。
|
1月前
|
数据采集 供应链 搜索推荐
数据集成:融合不同来源的数据
【6月更文挑战第4天】数据集成在企业中发挥关键作用,连接数据孤岛,促进信息流动,提升决策能力。通过抽取、清洗、转换和加载(ETL)不同来源、格式的数据,整合到统一框架,进行深度分析。以零售商为例,集成销售、客户和供应链数据可优化库存管理。数据清洗确保质量,转换满足分析需求,最终加载到数据仓库。Python和pandas库是实现这一过程的工具之一。随着技术进步,数据集成将推动企业向智能化和个性化发展。
54 2
|
27天前
|
数据采集 DataWorks 安全
DataWorks产品使用合集之选择独享调度,数据集成里可以使用,但是数据地图里面测试无法通过,是什么原因导致的
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
22 0
DataWorks产品使用合集之选择独享调度,数据集成里可以使用,但是数据地图里面测试无法通过,是什么原因导致的
|
9天前
|
DataWorks 安全 API
DataWorks产品使用合集之是否可以不使用DataWorks进行EMR的调度和DataX数据导入
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。

推荐镜像

更多