Apache Flink 在实时金融数据湖的应用

简介: 本文由京东搜索算法架构团队分享,主要介绍 Apache Flink 在京东商品搜索排序在线学习中的应用实践

一、背景

在京东的商品搜索排序中,经常会遇到搜索结果多样性不足导致系统非最优解的问题。为了解决数据马太效应带来的模型商品排序多样性的不足,我们利用基于二项式汤普森采样建模,但是该算法仍存在对所有用户采用一致的策略,未有效考虑用户和商品的个性化信息。基于该现状,我们采取在线学习,使深度学习和汤普森采样融合,实现个性化多样性排序方案,实时更新模型的关参数。

在该方案中,Flink 主要应用于实时样本的生成和 online learning 的实现。在在线学习过程中,样本是模型训练的基石,在超大规模样本数据的处理上,我们对比了 Flink、Storm 和 Spark Streaming 之后,最终选择用 Flink 作为实时样本流数据的生产以及迭代 online learning 参数的框架。在线学习的整体链路特别长,涉及在线端特征日志、流式特征处理、流式特征与用户行为标签关联、异常样本处理、模型动态参数实时训练与更新等环节,online learning 对样本处理和参数状态处理的准确性和稳定性要求较高,任何一个阶段都有可能出现问题,为此我们接入京东的 observer 体系,拥有完整的全链路监控系统,保证各个阶段数据的稳定性和完整性;下面我们首先介绍一下京东搜索在线学习架构。

二、京东搜索在线学习架构

京东搜索的排序模型系统架构主要包括以下几个部分:

1、Predictor 是模型预估服务,在 load 模型中分为 static 部分和 dynamic 部分,static 部分由离线数据训练得到,主要学习 user 和 doc 的稠密特征表示,dynamic 部分主要包含 doc 粒度的权重向量,这部分由实时的 online learning 任务实时更新。
2、Rank 主要包括一些排序策略,在排序最终结果确定之后,会实时落特征日志,将 doc 的特征按顺序写入特征数据流,作为后续实时样本的数据源(feature)。
3、Feature Collector 的任务是承接在线预估系统发出的特征数据,对下游屏蔽缓存、去重、筛选等在线系统特有逻辑,产出 Query+Doc 粒度的特征流。
4、Sample join 的任务将上面的 feature 数据、曝光、点击、加购、下单等用户行为标签数据作为数据源,通过 Flink 的 union + timer 数据模型关联成为符合业务要求的样本数据,算法可根据目标需求选择不同的标签作为正负样本标记。
5、Online learning 任务负责消费上游生成的实时样本做训练,负责更新 model 的 dynamic 部分。

image.png

三、实时样本生成

Online Learning 对于在线样本生成的时效性和准确性都有很高的要求,同时也对作业的稳定性有很高的要求。在海量用户日志数据实时涌入的情况下,我们不仅要保证作业的数据延时低、样本关联率高且任务稳定,而且作业的吞吐不受影响、资源使用率达到最高。

京东搜索排序在线样本的主要流程如下:

image.png

1、数据源大致有曝光流、feature 流和用户行为流等作为实时样本的数据源,统一以 JDQ 管道流的形式,由京东实时计算平台提供平台支撑。
2、接到 feature 流和曝光流、label 流后,进行数据清洗,得到任务需要的数据格式。
3、拿到各个标准流后,对各个流进行 union 操作,之后进行 keyby。
4、我们在 process function 里面添加 Flink timer 定时器,作为样本生成的实时窗口。
5、将生成的样本实时落入 jdq 和 HDFS,jdq 可以用作后面的 online learning 的 input,HDFS 持久存储样本数据,用于离线训练、增量学习和数据分析。

在线样本任务优化实践:

京东搜索样本数据吞吐量每秒达到 GB 规模,对分布式处理分片、超大状态和异常处理提出很高的优化要求。

1、数据倾斜

使用 keyby 的时候,难免会有数据倾斜的情况,这里我们假设 key 设计合理、 shuffle 方式选择正确、任务没有反压且资源足够使用,由于任务 parallelism 设置导致的数据倾斜的情况。我们先看 Flink 里面 key 是如何被分发到 subtask 上面的。

keygroup = assignToKeyGroup(key, maxParallelism)
subtaskNum = computeOperatorIndexForKeyGroup(maxParallelism, parallelism, keyGroupId)

image.png

假设我们的并发设置的是 300,那么 maxParallelism 就是 512,如此设计,必然导致有的 subtask 分布 1 个 keygroup 有的分配两个,同时也导致了数据自然倾斜。针对上述问题,有两个解决方案:

● 设置并行度为 2 的 n 次方;
● 设置最大并行度为 并行度的 n 倍。

如果使用方案 1 ,调整并发的话只能调整 2 的幂次,建议使用方案 2,且假如 parallelism 为 300,maxParallelism 设置为 1200 的情况下假如数据还是有倾斜,可以再相应的把 maxParallelism 设置大一些保证每个 keygroup 的 key 少一些,如此也可以降低数据倾斜的发生。

2、large checkpoint

在线样本用到了 Flink 的 state,我们之前默认将 state 放到了内存里面,但是随着放量的增加,state 数据量激增,发现 GC 时间特别长,之后改变策略,将 state 放入了 RocksDB,GC 问题得以解决。我们针对 checkpoint 做了如下配置:

● 开启增量 checkpoint;
● 合理设置 checkpoint 的超时时间、间隔时间和最小暂停时间。

image.png

● 让 Flink 自己管理 RocksDB 占用的内存,对 RocksDB 的 blockcache、writebuffer 等进行调优。
● 优化 state 的数据使用,将 state 数据放入多个 state object 里面使用,降低序列化/反序列化的代价。

在任务调优的时候我们发现我们的任务访问 RocksDB 的时间非常长,查看 jstack 发现,很多线程都在等待数据的序列化和反序列化,随着算法特征的逐渐增多,样本中的特征个数超过 500 个,使得每条数据的量级越来越大。但是在做样本关联的时候其实是不需要特征关联的,只需要相应的主键关联就可以了,因此,我们用 ValueState 存储主键,用 MapState/ListState 存储特征等值。当然了还可以将这些特征值存储到外部存储里面,这里就需要对网络 io 和 本地 io 之间的选择做一个取舍。

● failure recovery 的时候开启本地恢复。

由于我们的 checkpoint 数据达到了 TB 级别,一旦任务发生 failover,不管是针对 HDFS 还是针对任务本身,压力都非常大,因此,我们优先使用本地进行 recovery,这样,不仅可以降低 HDFS 的压力还可以增加 recovery 的速度。

四、Flink Online Learning

对于 online learning,我们先介绍一下伯努利汤普森采样算法,假设每个商品的 reward 概率服从 Beta 分布,因此给每个商品维护两个参数成功次数 si 及失败次数 fi,及所有商品的公共先验参数成功次数 α 和失败次数 β。

每次根据商品相应的 Beta 分布采样为最优商品的期望 reward: Q(at) = θi,并选择期望 reward 最大的商品展现给用户。最后根据环境给出真实 reward,更新模型相应的参数达到 online learning 的效果。该参数代表一个商品特征,用一个 n 维向量表示,该向量由原始特征通过 MLP 网络预测得到。原始特征经过 DNN 网络得到一个 N 维向量作为该商品的个性化表征,采用 Logistic Regression 函数建模似然函数,利用 Flink 构建该表征和实时反馈所组成的实时样本,用于不断迭代近似更新参数分布。

image.png

1、数据有序性保证

从 jdq 接过实时样本之后,由于之前并没有保证数据的有序性,这里采用 watermark 机制保证数据的有序性。

2、样本数据处理

把只曝光无行为的商品看做负样本,有点击及后续行为的商品看做正样本,当窗口将达到一定正负比例或数据量时进行一次 batch 训练,迭代出新的参数向量,将商品 embedding 数据放到 Flink 的 state 里面,之后作为 model 的 dynamic 部分更新参数。

3、 同步迭代、异步迭代

个性化 ee 参数在线学习采用异步更新方式的时候,存在参数更新顺序错乱问题,这会降低在线学习模型收敛速度,从而造成了流量的浪费,因此,参数异步更新方式更改为同步更新方式,避免参数读写错乱问题。在同步更新的方式下,存储在 status 中的参数向量需要在下一次训练迭代时使用,若参数发生丢失会使该商品的迭代过程中断,为防止系统风险造成参数丢失,设计了参数双重保障。一般的任务异常或重启后参数可从 checkpoint 或 savepoint 中恢复,如果意外情况下参数无法恢复,从远程在线服务中取回上一版参数并记录到 state。

4、多试验版本支持

在线学习任务使用同一个 Flink 任务来支持多个版本模型在不同实验桶下进行 AB 实验,通过版本号区分不同的 AB 流量桶,对应的实时样本以 docid+version 作为 key 进行处理,迭代过程互不影响。

5、custom serialization

为了提高带宽利用率以及性能的需求,我们内部采用 pb 格式传输数据,经过调研,pb 的传输格式优于 Flink 的兜底的 general class 的 kryo 序列化方式,因此我们采用了 Flink 的 custom serialization 解决方案,直接用 pb 格式在 op 之间传输数据。

五、监控系统

这里我们区分业务全链路监控和任务稳定性相关监控,具体情况下面将详细介绍。

1、全链路监控

整个系统使用京东内部的 observer 平台来实现业务全链路监控,主要包括 predictor 服务相关的监控、feature dump 的 QPS 监控、特征和标签质量监控、关联情况监控、train 相关的监控以及 AB 指标相关的一些监控,如下:

image.png

2、任务稳定性监控

任务稳定性监控这里主要是指 Flink 的任务稳定性监控,链路吞吐量达 GB/s规模,特征消息 QPS 达 10W 规模,且 online learning 的不可间断性,不管对于在线样本任务还是 online learning 的任务,相关监控报警都是必不可少的。

image.png

■ 容器的内存、cpu 监控、thread 个数,gc 监控

image.png

■ 样本相关业务监控

image.png

六、规划总结

Flink 在实时数据处理方面有优秀的性能、容灾、吞吐等表现、算子丰富易上手使用、自然支持批流一体化,且目前已有在线学习的框架开源,做在线学习是个不二的选择,随着机器学习数据规模的扩大和对数据时效性、模型时效性要求的提升,在线学习不仅仅作为离线模型训练的补充,更成为模型系统效率发展的趋势。为此我们做的规划如下:

image.png

作者致谢:感谢实时计算研发部、搜索排序算法团队的支持。

作者:阿里云实时计算Flink

原文链接 

本文为阿里云原创内容,未经允许不得转载

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

写给小白的云计算入门科普

作者:小枣君来源:鲜枣课堂云计算介绍2006年8月9日,当时的谷歌首席执行官埃里克施密特(Eric Schmidt)在搜索引擎大会(SES San Jose 2006)上,首次提出了“云计算”(Cloud C…

阿里云拨测:主动探测Web应用质量,助力提升用户体验

简介: 阿里云拨测是一种针对互联网应用(Web页面、网络链路等)进行应用性能和用户体验监测的服务,无需嵌码即可为云上用户提供开箱即用的企业级主动拨测式应用监测解决方案。 随着中国数字化经济的蓬勃发展,越来越多的企…

大数据,从青铜到王者

一.大数据方向工作介绍大数据方向的工作目前分为三个主要方向:01.大数据工程师02.数据分析师03.大数据科学家04.其他(数据挖掘本质算是机器学习,不过和数据相关,也可以理解为大数据的一个方向吧)二.大数据工程师的技能要求总结如下…

如何编写有效的接口测试?

简介: 在所有的开发测试中,接口测试是必不可少的一项。有效且覆盖完整的接口测试,不仅能保障新功能的开发质量,还能让开发在修改功能逻辑的时候有回归的能力,同时也是能优雅地进行重构的前提。编写接口测试要遵守哪些原…

商业方向的大数据专业_结合当前的人才需求趋势,大数据专业考研时可以选择哪些主攻方向...

首先,对于大数据专业的本科生来说,当前读研是不错的选择,随着大数据技术开始逐渐落地应用,产业领域需要大量高端应用型人才,所以如果没有继续读博的计划,可以重点关注一下专硕。在读研方向的选择上&#xf…

Seata RPC 模块的重构之路

简介: RPC 模块是我最初研究 Seata 源码开始的地方,因此我对 Seata 的 RPC 模块有过一些深刻研究,在我研究了一番后,发现 RPC 模块中的代码需要进行优化,使得代码更加优雅,交互逻辑更加清晰易懂&#xff0c…

被算法“监控”的打工人,这家公司 150 人被算法裁定为“不敬业”

整理 | 禾木木出品 | AI科技大本营(ID:rgznai100)导读近日,一家公司通过 AI 算法裁掉三成员工的消息在网上引起热议。当你上班时突然收到一封邮件显示“效率低下”而要求马上离开公司,你会怎么想呢?据 Game World Obse…

10倍性能提升!DLA SQL推出基于Alluxio的数据湖分析加速功能

简介: 在存储计算分离的场景下,通过网络从远端存储读取数据是一个代价较大的操作,往往会带来性能的损耗。以OSS为例,OSS数据读取延时通常较本地磁盘大很多,同时OSS对单个用户使用的带宽上限做了限制,这都会…

80×60长40米的地笼_石家庄Q345矩形方管 220*80*8方管 华东地区

摘要: 石家庄Q345矩形方管 220*80*8方管 华东地区 无锡征图钢业有限公司是一家以生产矩形钢管为主的方管厂作为专业矩管生产,无缝方管生产企业,矩形钢管生产工艺采用先进的热轧钢管生产线生产,产品销往 ,并部分出口&am…

惠普台式计算机型号怎么看,惠普电脑怎么看型号

惠普电脑怎么看型号如今很多人都已经习惯了使用笔记本电脑,然而又有很多人在用了很长时间后很难第一时间说出所使用笔记本电脑的型号,或者是不知道从哪里查看。下面是jy135小编收集整理的win7电脑配置怎么看,欢迎阅读。如今很多人都已经习惯了…

大促密集,CDN如何保障电商体验如丝般顺滑?

简介: 前不久,阿里云技术天团空降CSDN在线峰会,对核心技术竞争力进行解读。其中,阿里云高级技术专家曾福华分享了《双11: CDN如何保障电商大促如丝般顺滑》的议题。俗话说:养兵千日,用兵一时。每一次的战役…

fullcalendar 显示的时间间隔只有四十五分钟_NHR系列智能显示控制仪表RS485通信中应用...

请点击上方蓝字关注我们!01摘要NHR系列智能显示控制仪表是经过多年开发制造经验而设计生产,集诸多全新功能于一身的新一代智能显示控制仪表。针对现场温度、压力、液位、速度、流量等各种信号进行采集、显示、控制、远传、通讯、打印等处理,构…

高德地图驾车导航内存优化原理与实战

简介: 一般APP只需要关注前台内存过高的系统强杀FOOM,高德地图有不少用户使用后台导航,所以也需要关注后台的内存过高导致的系统强杀BOOM,且后台强杀较前台强杀更为严重。为了提升用户体验,内存治理迫在眉睫。 ​​背景…

向下一代互联网迈进 声网发布全链路加速FPA为互联网增加QoS保障

8月19日,声网Agora举办线上产品发布会,正式发布了“全链路加速FPA(Full-Path Accelerator)”。全链路加速FPA基于声网的软件定义实时网络 SD-RTN™,通过覆盖全球的多点端到端传输优化,全面提升了包含最后一…

平果手机桌面计算机,苹果手机便签记事本怎么在Windows电脑桌面上使用?

原标题:苹果手机便签记事本怎么在Windows电脑桌面上使用?互联网时代的今天,手机和电脑成了现代人必备的常用工具。电脑的话,肯定要选Windows电脑了。毕竟,Windows操作系统上自带有Office办公软件,在它上面办…

这是阿里技术专家对 SRE 和稳定性保障的理解

简介: 在技术工作中,对于产品/基础技术研发和 SRE 两种角色,通常会有基于「是否侧重编码」的理解。对于产品研发转做 SRE ,经常会产生是否要「脱离编码工作」的看法,或者认为是否要「偏离对产品/基础技术的推进」。 前…

Flink 助力美团数仓增量生产

简介: 本文由美团研究员、实时计算负责人鞠大升分享,主要介绍 Flink 助力美团数仓增量生产的应用实践。内容包括:1、数仓增量生产;2、流式数据集成;3、流式数据处理;4、流式 OLAP 应用;5、未来规…

PHP与MySQL外文文献译文和原文_读懂外文文献的秘诀在这里丨49周新闻

搜狗AI合成主播雅妮为你带来【2020年第49周】搜狗新闻联播全 文01搜狗翻译「文档翻译」功能新增“医疗”和“金融”专业术语翻译问君能有几多愁,文献查询挠破头。我本无心空对月,外文翻译更加虐。还在因为如何正确翻译文献资料发愁的朋友,请你…

微软云打印将直接与 OneDrive 集成;全球 90 多家组织敦促苹果放弃引入”儿童安全”功能计划……...

NEWS本周新闻回顾百度发布无人车出行服务平台“萝卜快跑”百度发布无人车出行服务平台“萝卜快跑”。截至2021年上半年,百度Apollo自动驾驶出行服务已累计接待乘客超过40万人次,测试里程超过1400万公里,自动驾驶专利数量超过2900件&#xff0…

「直播实录」中英数据库专家谈:数据库的过去、未来和现在

简介: 数据库是什么?未来的数据会被存在DNA里?数据库里的数据湖是什么? 1月16日,扫地僧做了一场直播,请到我的同事——数据库资深专家封神,和来自帝国理工的高级讲师Thomas Heinis(托…