Apache Paimon 在网易传媒推荐场景实践

本文涉及的产品
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
简介: Apache Paimon 在网易传媒推荐场景实践

背景


网易新闻是中国领先的全媒体新闻门户网站,提供全面、及时、权威的新闻资讯服务。推荐产品团队主要致力于网易新闻 APP 端内资讯的个性化推荐,加强用户粘性,提高用户的阅读体验。
随着业务的持续发展,原有的推荐数仓架构逐渐满足不了业务对数据的多样性需求,数据处理流程也愈发复杂。近期,我们与杭研同事一起深入调研了数据湖方案 Apache Paimon,以此为底座,旨在解决传统数仓在数据更新能力上存在的痛点。

基于 Partial-Update 构建实时大宽表


网易新闻从推荐业务内容看,主要包括头条、视频、跟帖、圈子等,推荐数仓会对每个内容构建主题宽表,宽表的应用广泛,查询率高,保证宽表数据的高效、稳定产出对推荐数仓业务线具有重要影响。在传媒新闻推荐场景中,包含两种业务形态:


  • 推荐去重场景:即对于任意用户不会重复推荐相同文章;
  • 推荐不去重场景:如付费业务,为了提高付费转化率,推荐引擎会对历史推荐过单没有曝光的优质文章进行多次推荐;


推荐去重


该场景容易定义唯一key(devid+docid),其中 devid 表示用户设备的唯一 id,docid 表示文章 id。由于不存在重复推荐的情况,通过该组合即可唯一定义一条用户推荐数据。以头条宽表为例,原有的数据处理流程如下:   原宽表数据计算链路
其中,datastream 是网易内部的数据同步工具, 可实现 Kafka 到 HDFS 的数据落盘。
离线join计算
头条宽表的计算逻辑:以 devid+docid 为 primary key,用 sdk 数据匹配推荐数据,sdk 中我们关注的最主要指标为曝光(exp)、点击(clk)、阅读时长(du),简化数据结构如下:

devid docid rec_reason rec_time exp clk du
111 aaa A 2023-11-20 10:00:00 false false 0
222 bbb B 2023-11-20 10:10:00 true false 0
333 ccc C 2023-11-20 10:20:00 true true 20


该实现方案较为简单粗暴,先使推荐数据流 rec 和用户行为数据流 sdk 落盘 HDFS,再基于 Spark 离线计算前一小时的 rec left join 前一小时 sdk( sdk 数据范围多一段 gap 时间,降低数据漂移的影响)。此方案存在的问题:数据可见时间为 H+1,实时性不佳;数据质量一般。
针对以上问题,我们基于 Flink + Paimon 重构优化了头条宽表的计算逻辑,数据近实时落盘,并实现了部分表字段的 partial-update 能力,从而实现准实时宽表的构建。新方案解决大宽表数据可见性长的问题,头条宽表由原来的 H+1 时间延迟提升至分钟级延迟;同时也优化了宽表计算的数据处理链路,节省存储计算资源。
image.png

基于 Paimon 的实时宽表计算流程图Apache Paimon 支持启动多个实时任务写入同一张 Paimon 表,但在实际开发过程中,我们选择同一个任务多流 Union 方式写入,该方式可以直接使用写入任务做 Compaction ,使用起来相对简单。对于按照时间分区的表来说,分区边界附近仍存在一定程度的数据漂移,主要是 sdk 数据。例如2023-11-27 23:10:00 的 rec 和 2023-11-28 00:00:01 的 sdk 数据匹配不上,我们采用冗余分区边界附近的 sdk 数据的方式处理,分别向两个分区发送 sdk 数据。

推荐不去重


由于文章存在重复推荐的问题,不能简单的用 devid+docid 方式来确认 primary key,重新设计主键为 devid+docid+rec_time,其中 rec_time 表示文章对应的推荐时间戳。
由于 rec 数据和 sdk 数据上游产出业务方不同,且数据不完全互通,sdk 数据拿不到 rec 数据的 rec_time 字段。根据业务推荐特点,由于重复推荐只有在没有曝光的情况下才会发生,sdk 数据只需要匹配最新的对应 rec 数据即可。缓存一段时间的 rec 数据,基于 Flink 的 map-state 保留 devid+docid 对应的最新 rec_time ,即 sdk 数据从缓存中获取对应的 rec_time 作为自身的 rec_time,从而构建完整的 key。不过这种方案目前如果 rec 数据消费压力过大会存在数据准确性问题, 由于业务方对准确性要求不高,所以偶尔发生这种情况也能容忍。
   image.png

重复推荐 Paimon 宽表数据处理流程图实际数据结果简化之后如下:

devid docid rec_reason rec_time exp clk du
111 aaa A 2023-11-20 10:00:00 false false 0
222 bbb B 2023-11-20 10:00:00 false false 0
111 aaa A 2023-11-20 10:30:00 true true 20
222 bbb B 2023-11-20 10:30:00 false false 0


总体而言,引入 Apache Paimon 后,在宽表计算方面有效解决了老架构存在的痛点问题:

  1. 数据实时性得到有效提升,从原来小时级可见提升至分钟级(取决于 Flink checkpoint 时间),这对于实时性要求较高的业务具有重要作用,如策略在调整线上参数后效果随时可见,不再需要 H+1 时间等待;
  2. 数据处理链路在一定程度上也得到了优化,降低成本开销。


优化数据统计链路实现降本


以推荐数字化业务需求为例,介绍传媒基于 Paimon 在数据链路处理上的降本增效落地实践。推荐数字化,顾名思义就是将推荐过程中的多项指标以数字化的形式展现出来,用于计算每篇文章在推荐理由、推荐阶段(召回、排序等)、AB 实验维度的推荐次数。该数据无论是开发同学在排查问题还是策略同学在数据分析方面都有着广泛应用,有助于优化推荐准确性、提升转化率、优化资源配置等。
推荐数字化业务的原始数据,简化数据结构如下:

docid rec_reason step_name ab_id num
aaa NCF recall 111 2
bbb STEP_LOG after-filter 222 8
ccc ND_PFIDEMB art_feat 333 5


原数据处理流程图如下:
   

image.png原推荐数字化处理链路图推荐数字化处理链路较长,且数据处理量大,平均 qps 20000+,导致相关任务处理的资源开销大。另外,在推荐数字化处理过程中,需要对引擎生成的原始数据进行聚合 (sum) 操作,聚合计算不同维度下的推荐值,最终生成小时级别的 DWS 表提供给下游用户使用。而 paimon 的 aggregation 引擎天然支持这一该场景,能够轻松应对。基于以上分析,引入 Apache Paimon 后,优化后的数据处理链路图如下image.png

基于 Paimon 的推荐数字化数据处理链路图

优化之后,该业务在数据处理阶段取得了显著的效果:

  1. 提升数据可见性:数据处理模式由原来的定时批处理模式(小时级)优化为实时写入,对于部分实时性要求高的场景非常重要,提供更好的用户体验。
  2. 降低资源消耗:通过缩短链路,可以减少资源的使用量,提高系统的效率,降低成本。
  3. 简化系统架构:较短的数据处理链路可以简化数据流程和逻辑,使系统更加灵活、可维护和易于扩展。


未来计划


  1. 传媒场景中的很多实时大宽表业务中的 Partial-Update 表只有少量数据会关联上,很多非关联上的数据是不需要的,后面会引入数据淘汰策略,淘汰掉这些数据。
  2. 用 Paimon 跨分区更新能力解决分区交界出数据漂移问题。
相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
2月前
|
消息中间件 存储 监控
构建高可用性Apache Kafka集群:从理论到实践
【10月更文挑战第24天】随着大数据时代的到来,数据传输与处理的需求日益增长。Apache Kafka作为一个高性能的消息队列服务,因其出色的吞吐量、可扩展性和容错能力而受到广泛欢迎。然而,在构建大规模生产环境下的Kafka集群时,保证其高可用性是至关重要的。本文将从个人实践经验出发,详细介绍如何构建一个高可用性的Kafka集群,包括集群规划、节点配置以及故障恢复机制等方面。
100 4
|
2月前
|
存储 消息中间件 分布式计算
Cisco WebEx 数据平台:统一 Trino、Pinot、Iceberg 及 Kyuubi,探索 Apache Doris 在 Cisco 的改造实践
Cisco WebEx 早期数据平台采用了多系统架构(包括 Trino、Pinot、Iceberg 、 Kyuubi 等),面临架构复杂、数据冗余存储、运维困难、资源利用率低、数据时效性差等问题。因此,引入 Apache Doris 替换了 Trino、Pinot 、 Iceberg 及 Kyuubi 技术栈,依赖于 Doris 的实时数据湖能力及高性能 OLAP 分析能力,统一数据湖仓及查询分析引擎,显著提升了查询性能及系统稳定性,同时实现资源成本降低 30%。
Cisco WebEx 数据平台:统一 Trino、Pinot、Iceberg 及 Kyuubi,探索 Apache Doris 在 Cisco 的改造实践
|
2月前
|
存储 数据挖掘 数据处理
巴别时代使用 Apache Paimon 构建 Streaming Lakehouse 的实践
随着数据湖技术的发展,企业纷纷探索其优化潜力。本文分享了巴别时代使用 Apache Paimon 构建 Streaming Lakehouse 的实践。Paimon 支持流式和批处理,提供高性能、统一的数据访问和流批一体的优势。通过示例代码和实践经验,展示了如何高效处理实时数据,解决了数据一致性和故障恢复等挑战。
127 61
|
2月前
|
SQL 存储 数据处理
兼顾高性能与低成本,浅析 Apache Doris 异步物化视图原理及典型场景
Apache Doris 物化视图进行了支持。**早期版本中,Doris 支持同步物化视图;从 2.1 版本开始,正式引入异步物化视图,[并在 3.0 版本中完善了这一功能](https://www.selectdb.com/blog/1058)。**
|
2月前
|
监控 Cloud Native BI
8+ 典型分析场景,25+ 标杆案例,Apache Doris 和 SelectDB 精选案例集(2024版)电子版上线
飞轮科技正式推出 Apache Doris 和 SelectDB 精选案例集 ——《走向现代化的数据仓库(2024 版)》,汇聚了来自各行各业的成功案例与实践经验。该书以行业为划分标准,辅以使用场景标签,旨在为读者提供一个高度整合、全面涵盖、分类清晰且易于查阅的学习资源库。
|
2月前
|
分布式计算 大数据 Apache
Apache Spark & Paimon Meetup · 北京站,助力 LakeHouse 架构生产落地
2024年11月15日13:30北京市朝阳区阿里中心-望京A座-05F,阿里云 EMR 技术团队联合 Apache Paimon 社区举办 Apache Spark & Paimon meetup,助力企业 LakeHouse 架构生产落地”线下 meetup,欢迎报名参加!
110 3
|
3月前
|
存储 小程序 Apache
10月26日@杭州,飞轮科技 x 阿里云举办 Apache Doris Meetup,探索保险、游戏、制造及电信领域数据仓库建设实践
10月26日,由飞轮科技与阿里云联手发起的 Apache Doris 杭州站 Meetup 即将开启!
73 0
|
20天前
|
存储 人工智能 大数据
The Past, Present and Future of Apache Flink
本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024 上海站主论坛开场的分享,今年正值 Flink 开源项目诞生的第 10 周年,借此时机,王峰回顾了 Flink 在过去 10 年的发展历程以及 Flink社区当前最新的技术成果,最后展望下一个十年 Flink 路向何方。
308 33
The Past, Present and Future of Apache Flink
|
3月前
|
SQL Java API
Apache Flink 2.0-preview released
Apache Flink 社区正积极筹备 Flink 2.0 的发布,这是自 Flink 1.0 发布以来的首个重大更新。Flink 2.0 将引入多项激动人心的功能和改进,包括存算分离状态管理、物化表、批作业自适应执行等,同时也包含了一些不兼容的变更。目前提供的预览版旨在让用户提前尝试新功能并收集反馈,但不建议在生产环境中使用。
874 13
Apache Flink 2.0-preview released
|
3月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
105 3

推荐镜像

更多