实时计算如何帮助淘宝实现在线「实时选品」?
一、背景介绍
二、解决方案
2.1 问题分析
- 实时触发问题:流计算必须要有触发数据源,用户提交的特征数据存储在idb中,idb如何与Blink计算流程建立关联?
- 中间状态存储问题:Blink计算过程中,依据业务场景需要记录上一次中间计算状态,如何存储这些中间状态,并在需要时实时读取?
- 实时生效问题:Blink计算结果需要最终在搜索引擎生效,Blink如何跟搜索引擎交互,使计算结果实时生效?
- 增量问题:如果没有增量过程,离线全量切换数据期间,会覆盖部分已更新的数据,入如何增量追数据?
- TT日志:阿里日志采集系统,用户可以对日志进行订阅,TT与idb(数据库)、Blink有较好支持,是idb和Blink交互的重要媒介。
- Hbase:开源的非关系型分布式数据库,与Blink有较好的接口交互,可用于存储和读取中间计算状态。
- Swift:阿里搜索事业部自主研发的消息系统,目前主搜索实时都是基于该系统进行消息传输的,可基于该系统解决引擎实时生效和增量问题。
2.2 实现流程
- 用户提交选品特征数据,数据保存到idb(数据库)并同步到TT日志。
- TT日志更新会触发Blink任务,日志解析节点会先解析TT日志,获取选品特征数据。
- Query拆分节点先预估SPU数量,然后根据SPU数量确定并发请求数,并拼接Sp参数。
- 请求Sp服务节点并发请求Sp服务,获取SPU信息。
- 数据计算节点从Hbase中读取中间状态数据,根据业务逻辑进行计算。
- 计算结果回写Hbase数据库,用于下次计算使用。
- 回写TT节点和Swift消息节点同时回写TT和Swift。
- dump接受Swift消息,将数据更新至引擎,实现数据实时生效。
- TT记录计算结果,回写ODPS,用于离线全量计算。
2.3 实现细节
- 节点分析:“请求Sp节点”的业务场景是一个“一对多”的过程,因此采用UDTF类型实现。
- 封装UDTF类:该类需要继承TableFunction,其中T为自己定义的pojo,用于向下个运行节点传递。
- 节点输出:需要定义自己的Pojo类(上一步提到的T),这样节点的输出才能在下个节点中看到。
- 主函数流程串联:Blink开发流程需要一个主函数将各个计算节点关联起来,达到流计算的目的,建议主函数用Scala语言开发,代码更加通俗易懂。
2.4 参考代码
public class SearchEngineUdtf extends TableFunction<EngineFields> { private static final Logger logger = LoggerFactory.getLogger(SearchEngineUdtf.class); /** * 请求引擎获取召回字段 * @param params */ public void eval(String params) { SpuSearchResult<String> spuSearchResult = SpuSearchEngineUtil.getFromSpuSearch(params); if(spuSearchResult.getSuccess()){ //结果解析 JSONObject kxuanObj = SpuSearchEngineUtil.getSpResponseJson(spuSearchResult, "sp_kxuan"); if(null == kxuanObj || kxuanObj.isEmpty()){ logger.error("sp query: " + spuSearchResult.getSearchURL()); logger.error(String.format("[%s],%s", Constant.ERR_PAR_SP_RESULT,"get key:sp_kxuan data failed! ")); }else { List<EngineFields> engineFieldsList = SpuSearchEngineUtil.getSpAuction(kxuanObj); //并发输出到数据流 for(EngineFields engineFields : engineFieldsList){ collect(engineFields); } } }else { logger.error(String.format("[%s],%s",Constant.ERR_REQ_SP, "request SpuEngine failed!")); } } }
2.5 运维发布
三、成果总结
四、作者简介
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
中国HBase技术社区第七届MeetUp ——HBase技术与应用实践(成都站)
中国HBase技术社区第七届MeetUp——HBase技术与应用实践 HBase—Hadoop Database是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。HBase的特点是高可靠性、高性能、面向列、可伸缩的分布式存储系统,如今HBase已经广泛应用于各互联网行业。那么我们如何熟练掌握HBase技术及应用呢? 2018年11月3号,由中国HBase技术社区、DataFun社区、爱奇艺主办的中国第七届HBase Meetup将来到成都,届时来自阿里、爱奇艺、G7等公司HBase的专家们,将为大家分享HBase技术的相关应用与发展情况。 主办方:中国HBase技术社区、DataFun社区、爱奇艺 联合主办方:泰智会 合作伙伴:极客邦科技、掘金
- 下一篇
中国HBase技术社区第六届MeetUp ——HBase典型应用场景与实践
HBase—Hadoop Database是一个分布式的、面向列的开源数据库,该技术来源于Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。HBase的特点是高可靠性、高性能、面向列、可伸缩的分布式存储系统,如今HBase已经广泛应用于各互联网行业。那么我们如何熟练掌握HBase技术及应用呢? 2018年10月20号,由中国HBase技术社区、DataFun社区联合猫友会、腾讯众创空间主办的中国第六届HBase Meetup将来到武汉,届时来自阿里巴巴、阿里云及烽火集成等公司HBase的专家们,将为大家分享HBase技术的典型应用场景及实践。 主办方:中国HBase技术社区、DataFun社区 联合主办方:猫友会、腾讯众创空间 合作伙伴:极客邦科技、掘金社区 视频支持:IT大咖说 时间:201
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群