1、胡家煊/字节跳动推荐架构数据研发工程师流批一体在字节跳动特征平台的实践流批一体在字节跳动特征平台的实践Practice of Flink Stream-Batch Unification in ByteDance recommendation system背景介绍背景介绍特征平台架构特征平台架构流批一体实践与探索流批一体实践与探索#1#1#2#2#3#3未来规划未来规划#4 4#1#1业务背景业务背景抖音推荐业务场景业务场景头条、西瓜 推荐平台架构演进平台架构演进第一阶段基于 MapReduce、Storm 搭建的各种profile 服务;第二阶段引入 Flink,拥抱大数据生态;第三阶段从
2、Native Flink 逐渐迁移至Flink SQL;提升开发效率,降低运维成本;第四阶段基于 Flink SQL 与 State,构建以离线计算为核心的特征生产平台;第五阶段拥抱流批一体,探索新架构;推荐系统数据流推荐系统数据流特征分类特征分类特征类型特征主键特征举例特征来源User侧Group侧Match类型Context类型user_id、author_iditem_id-年龄、性别、行为计数类目、停留时长、播放量、完播次数等二跳统计、交互统计设备型号、位置信息、推出的时间UserProfileGroupProfile、Counter图存储服务当前Context核心问题核心问题缺少特征
3、全局视图特征服务相对零散、边界比较模糊,可能存在冗余特征导致资源浪费。离线任务游离绝大部分特征服务以 C+service 为核心,只提供读写接口,业务方自行维护离线任务。Online Serving 性能特征服务存储特征原始数据,请求时根据参数在线计算;部分场景读写扇出严重,影响延迟。解决思路:解决思路:以离线计算为核心以离线计算为核心 以离线任务为切入点,收敛特征生产入口;使用 Flink State 存储特征计算所需的中间结果;使用 Flink Timer 定时触发特征的计算,将计算好的结果更新到 KV Storage;使用 Flink SQL 解决特征计算的ETL逻辑;#2 2平台架构平
4、台架构DarwinDarwin 特征平台特征平台存储服务特征计算ETL 计算在线查询特征订阅OLAP 分析抖音推荐电商推荐审核风控产品运营报表统计应用场景核心服务计算引擎数据源管理任务管理监控分析特征回溯FlinkSparkStreaming SQLNoSQLMySQLHbaseKafkaHiveHudi统一 DSLETL 类型特征计算状态特征计算Flink CEPBatch SQL特征入湖计算模型计算模型ETL 计算数据源注册user_action_log_1lookup_tableLookup JoinUnionSelect-Convert_to_rowuser_action_log_2特
5、征状态计算keyed_processSinkSelect-Convert_to_row注册数据源计算模型计算模型支持 PB、JSON 格式支持 Hive、Kafka、Redis、RPC ServiceETL 计算计算模型计算模型复杂运算可以通过上传 UDF 表达支持 and、or、=、=、聚合的过程会有额外开销ETLETL 演进演进特征-数据源 Unified一个 Select 对应多个特征 CASE WHEN 语法将谓词逻辑拆分到每个单独的特征 通过打 tag 的方式,标记该条数据是否属于某个特征业务场景应用业务场景应用实际场景-Streaming i2i 计算 Step1.双流 join,
6、补齐商品类目字段 Step2.ETL 处理,过滤出属于 click 类的记录 Step3.根据 uid 做 keyby,计算相关物品列表 Step4.根据 pid 做 keyby,更新时间分片中相似 item 的权重,聚合计算 item2item 相似度,输出到 online serving场景需求场景需求:计算某个商品的相似度列表计算某个商品的相似度列表在 State 中维护一个商品相似度列表,持续更新权重关键点:两次 keyby,先用 uid,计算出于当前商品关联的相似商品;再根据 pidkeyby具体步骤:业务调优业务调优空数据聚合问题MapSta