幸福里基于 Flink & Paimon 的流式数仓实践
幸福里业务是一种典型的交易、事务类型的业务场景,这种业务场景在实时数仓建模中遇到了诸多挑战。本次分享主要介绍幸福里业务基于 Flink & Paimon 构建流式数仓的实践经验,从业务背景、流批一体数仓架构、实践中遇到的问题和解决方案,借助 Paimon 最终能拿到的收益,以及未来规划方面进行介绍。
一、业务背景
- 准确性要求 100%,不能有数据丢失和重复的情况发生。
- 需要全量计算,增量数据在 MQ 留存时间有限,需要拿到全量数据 View 进行计算。
实时数仓建模特点
- 开发复杂度高
- 运维成本高
- 状态大
为什么选择 Paimon
- 存储异构,Base+Delta 数据难对齐;
- 去重引入非确定性计算和大状态;
- 血缘关系复杂 & 数据订正结果回退暴露给用户。
- 流批一体 的存储可以以统一 Table 对外输出,实时和离线数据可以存储到一张 Paimon 表中,直接解决了对齐的问题;
- 不需要去重,Changelog Producer 代替状态 算子 ,同时支持在存储上产生完整的 Log,并将其持久化代替原有链路上的状态算子;
- 血缘管理 & 数据一致性管理,支持无感知数据订正。
二、流式数仓实践
架构设计
- 存储层选用了 HDFS 或 S3 的 对象存储 作为存储底座,选用 Paimon 作为统一的 Table 抽象;
- 计算层选用 Flink 同一的技术栈,统一了流批计算;
- 数据管理层实现了 Table 的血缘管理和数据的血缘管理,基于这样的血缘管理可以做到数据一致性,血缘管理可以用于数据溯源的需求,为数据质量提供保障。
- 数据一致性管理, 流批一体 ETL 数据管理。在多表一致性联调的时候,可以自动对齐数据,不需要开发人员手动对齐。
业务流式数仓 Pipeline
收益
- 简化开发流程
- 提升运维体验
- 减少状态量
- 数据新鲜度差: 端到端 的延迟变化为分钟级,数据新鲜度降低;
- 小文件问题:一些小文件可能会影响读写性能。
三、流式数仓的调优
端到端延迟调优
- 数据可见性 & Checkpoint
- 数据可见性与 Checkpoint 绑定。更严格的说是一个周期的数据可见性与 Checkpoint 周期严格绑定。
- Checkpoint 周期 = Checkpoint interval + Checkpoint latency 。Checkpoint interval 是 Checkpoint 触发的频率;Checkpoint latency 是整个完成一个 Checkpoint 所需的耗时。
- 调小 Checkpoint Interval
- Checkpoint Latency 优化
- Log-Based 增量 Checkpoint
- 减少状态量
- Checkpoint 持续上传
- 搭建独立 HDFS 集群
小文件优化
- 小文件问题
- 小文件 影响因素
- 文件生成。数据文件在磁盘上生成是有两个 触 发 时机的,一个是 Checkpoint 的时候,它会强制把当前的 WriteBuffer 里的数据刷到磁盘上;第二个是 WriteBuffer,当它满了也会把内存里面的数据刷到磁盘上。如果把 Checkpoint Interval 调的过小,或是把 WriteBuffer 容量设置的比较小,那么数据就会更频繁的被刷到磁盘上,而产生过量的小文件。
- 文件划分。通过设置一些 Partition key 或 Bucket key,就决定了数据的走向,它会落在哪些文件里。比如,生产中实际数量非常小,同时又设置了过多的 Bucket,那么可以预见,一个 Bucket 可以分到的数据量一定会比较小。这个过程中也会遇到小文件问题。另外,如果设置 Partition key 或 Bucket key 不合理,可能会产生一些文件倾斜的情况,即热 Key 问题。
- 文件清理。Paimon 具有文件清理机制,在 Compaction 过程中会删除一些无用的文件。另外,数据由 Snapshot 管理,如果 Snapshot 过期,就会从磁盘上删除对应的数据文件。如果 Compaction 触发条件和 Snapshot 过期条件没有管理好,也会造成冗余的文件留在磁盘上。
- 小文件 调优 参数
- Checkpoint interval::推荐在 1-2 min 比较合适;
- WriteBuffer 大小:推荐使用默认值,除非遇到相关问题需要调整;
- 业务数据量:可以根据业务数据量调节 Bucket 数,调整依据为单个 Bucket 大小在 1G 左右比较合适;
- Key 的设置:可以根据实际的业务 Key 特点设置合适的 Bucket-key、Partition,以防产生热 Key 倾斜的问题;
- Compaction 管理和 Snapshot 管理相关参数:推荐使用默认值,除非遇到相关问题需要调整。
收益
- 端到端延迟:在原始实时数仓开启 Mini-batch 的情况下,端到端延迟没有明显退化,可以支持 1-2 min 的近实时可见;
- 数据排查时效性:可以从小时级提升到分钟级;
- 状态量节省了约 30%;
- 开发周期缩短约 50%。
四、未来规划
Q&A

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
值得收藏!如何快速画出一幅漂亮的架构图
为什么要画好一幅架构图?一幅漂亮的架构图既是创作者的深度结构化思考和表达,对于读者来说也更加容易理解架构所要表达的意思。 然而不擅长画图的程序员,在大脑里已经有了思路,如何快速能够产出精美的架构图呢?这篇文章帮你总结了常用的架构图类型,可以借鉴笔者提供的模板,快速地产出符合你的业务需要的架构图。 周期图 XY轴坐标图 图形特点 简洁、容易理解、易扩展 使用场景 适用于一组或者一组以上的数据趋势对比 美观度 ☆☆☆☆ 复杂度 ☆☆☆ 时间轴 图形特点 简洁、容易理解、易扩展 使用场景 时间轴维度 美观度 ☆☆☆☆ 复杂度 ☆☆ 生命周期图 图形特点 简洁、容易理解、易扩展 使用场景 适用于对一个对象进行生命周期划分或者分类扩展 美观度 ☆☆☆☆ 复杂度 ☆ 坐标轴带图标模板 图形特点 简洁、容易理解、美观 使用场景 适用于对一个带有产品图的对象进行生命周期划分或者分类扩展 美观度 ☆☆☆☆ 复杂度 ☆☆ 块状图 Banner图 图形特点 简单、模块化、信息丰富、易拓展 使用场景 适合对于信息平铺展示图 美观度 ☆☆☆ 复杂度 ☆☆ 系统架构图 应用依赖图 图形特点 简洁,引入容易理解的...
- 下一篇
POSIX 真的不适合对象存储吗?
最近,留意到 MinIO 官方博客的一篇题为“在对象存储上实现 POSIX 访问接口是坏主意”的文章,作者以 S3FS-FUSE 为例分享了通过 POSIX 方式访问 MinIO 中的数据时碰到了性能方面的困难,性能远不如直接访问 MinIO。在对结果进行分析时,作者认为是 POSIX 本身存在的缺陷导致的性能问题。这个结论与我们既有经验有一定出入。 我们知道 POSIX 是一个有用而且广泛应用的标准,遵循它而开发的程序可以保证不同操作系统之间的兼容性和可移植性。各行各业中常用的业务系统和应用程序,大多遵循 POSIX 标准。 随着云计算、大数据、人工智能等技术的发展和数据存储量的攀升,本地化应用也逐渐产生对对象存储等弹性存储的需求,MinIO 等对象存储虽然提供了各种语言的 SDK,但许多传统应用很难甚至无法修改代码去适配对象存储的访问接口,这促使很多存储产品在对象存储的基础上去实现 POSIX 接口来满足这样的刚性需求。 业内在对象存储上实现 POSIX 接口的产品有很多,比如 Ceph、JuiceFS、Weka 等,它们都有广泛的用户群和大量的成功案例,在性能方面也都有不错的表现...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6