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

简介: 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 跨分区更新能力解决分区交界出数据漂移问题。
相关实践学习
数据库实验室挑战任务-初级任务
本场景介绍如何开通属于你的免费云数据库,在RDS-MySQL中完成对学生成绩的详情查询,执行指定类型SQL。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
18天前
|
消息中间件 存储 大数据
快手基于Apache Hudi的实践
快手基于Apache Hudi的实践
27 0
|
18天前
|
SQL 大数据 BI
从离线到实时:无锡锡商银行基于 Apache Doris 的数据仓库演进实践
从离线到实时:无锡锡商银行基于 Apache Doris 的数据仓库演进实践
|
18天前
|
存储 监控 Apache
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
网易的灵犀办公和云信利用 Apache Doris 改进了大规模日志和时序数据处理,取代了 Elasticsearch 和 InfluxDB。Doris 实现了更低的服务器资源消耗和更高的查询性能,相比 Elasticsearch,查询速度提升至少 11 倍,存储资源节省达 70%。Doris 的列式存储、高压缩比和倒排索引等功能,优化了日志和时序数据的存储与分析,降低了存储成本并提高了查询效率。在灵犀办公和云信的实际应用中,Doris 显示出显著的性能优势,成功应对了数据增长带来的挑战。
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
|
18天前
|
存储 分布式计算 Apache
官宣|Apache Paimon 毕业成为顶级项目,数据湖步入实时新篇章!
Apache Paimon 在构建实时数据湖与流批处理技术领域取得了重大突破,数据湖步入实时新篇章!
2371 6
官宣|Apache Paimon 毕业成为顶级项目,数据湖步入实时新篇章!
|
18天前
|
Java 数据处理 调度
更高效准确的数据库内部任务调度实践,阿里云数据库SelectDB 内核 Apache Doris 内置 Job Scheduler 的实现与应用
Apache Doris 2.1 引入了内置的 Job Scheduler,旨在解决依赖外部调度系统的问题,提供秒级精确的定时任务管理。
|
18天前
|
存储 SQL 数据管理
阿里云数据库 SelectDB 内核 Apache Doris 如何基于自增列满足高效字典编码等典型场景需求|Deep Dive 系列
自增列的实现,使得 Apache Doris 可以在处理大规模时展示出更高的稳定性和可靠性。通过自增列,用户能够高效进行字典编码,显著提升了字符串精确去重以及查询的性能。使用自增列作为主键来存储明细数据,可以完美的解决明细数据更新的问题。同时,基于自增列,用户可以实现高效的分页机制,轻松应对深分页场景,有效过滤掉大量非必需数据,从而减轻数据库的负载压力,为用户带来了更加流畅和高效的数据处理体验。
|
18天前
|
存储 SQL 分布式计算
Apache Hudi在Linkflow构建实时数据湖的生产实践
Apache Hudi在Linkflow构建实时数据湖的生产实践
57 0
|
18天前
|
存储 分布式计算 分布式数据库
字节跳动基于Apache Hudi构建EB级数据湖实践
字节跳动基于Apache Hudi构建EB级数据湖实践
39 2
|
18天前
|
存储 SQL 数据管理
字节跳动基于Apache Hudi构建实时数据湖平台实践
字节跳动基于Apache Hudi构建实时数据湖平台实践
79 0
|
10天前
|
消息中间件 Java Kafka
实时计算 Flink版操作报错之Apache Flink中的SplitFetcher线程在读取数据时遇到了未预期的情况,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。

推荐镜像

更多