Flink 在讯飞 AI 营销业务的实时数据分析实践

摘要:本文整理自科大讯飞中级大数据工程师汪李之在 Flink Forward Asia 2021 的分享。本篇内容主要分为四个部分:

  1. 业务简介
  2. 数仓演进
  3. 场景实践
  4. 未来展望

点击查看直播回放 & 演讲PDF

一、业务简介

构建实时数据分析平台是为了更好的解决业务对更高数据时效性的需求,先简单介绍一下业务流程。

从日常的场景说起,当我们打开手机 APP 时,常会看到广告。在这样一个场景中,涉及到了两个比较重要的角色。一是手机 APP,即流量方;另一个是投广告的广告主,如支付宝、京东会投放电商广告。广告主购买流量方的流量投广告就产生了交易。

讯飞构建了一个流量交易平台,流量交易平台主要的职能是聚合下游流量,上游再对接广告主,从而帮助广告主和流量方在平台上进行交易。讯飞还构建了投放平台,这个平台更侧重于服务广告主,帮助广告主投放广告,优化广告效果。

在上述的业务流程图中,APP 与平台交互时会向平台发起请求,然后平台会下发广告,用户随后才能看到广告。用户看到广告的这个动作称之为一次曝光,APP 会把这次曝光行为上报给平台。如果用户点击了广告,那么 APP 也会上报点击行为。

广告在产生之后发生了很多行为,可以将广告的整个过程称为广告的一次生命周期,不仅限于图中的请求、曝光、点击这三次行为,后面可能还有下单、购买等。

在这样一个业务流程中,业务的核心诉求是什么呢?在广告的生命周期中有请求、曝光和点击等各种行为,这些行为会产生对应的业务日志。那么就需要从日志生成数据供业务侧分析,从日志到分析的过程中就引入了数仓构建、数仓分层,数据呈现的时效性就带来了实时数据仓库的发展。

二、数仓演进

上图是一个典型的数仓分层框架,最底层是 ODS 数据,包括业务日志流、OLTP 数据库、第三方文档数据。经过 ETL 将 ODS 层的数据清洗成业务模型,也就是 DWD 层。

最初是建立了 Spark 数仓,将业务日志收集到 Kafka 中再投递到 HDFS 上,通过 Spark 对日志进行清洗建模,然后将业务模型再回写到 HDFS 上,再使用 Spark 对模型进行统计、分析、输出报表数据。后续,讯飞沿用了 Spark 技术栈引入了 spark-streaming。

随后逐渐将 spark-streaming 迁移到了 Flink 上,主要是因为 Flink 更高的时效性和对事件时间的支持。

当初 spark-streaming 的实践是微批的,一般设置 10 秒或是 30 秒一批,数据的时效性顶多是秒级的。而 Flink 可以支持事件驱动的开发模式,理论上时效性可以达到毫秒级。

当初基于 spark-streaming 的实时数据流逻辑较为简陋,没有形成一个数仓分层的结构。而 Flink 可以基于 watermark 支持事件时间,并且支持对延迟数据的处理,对于构建一个业务逻辑完备的数仓有很大的帮助。

由上图可见,ODS 的业务日志收集到 Kafka 中,Flink 从 Kafka 中消费业务日志,清洗处理后将业务模型再回写到 Kafka 中。然后再基于 Flink 去消费 Kafka 中的模型,提取维度和指标,统计后输出报表。有些报表会直接写到 sql 或 HBase 中,还有一些报表会回写到 Kafka 中,再由 Druid 从 Kafka 中主动摄取这部分报表数据。

在整个数据流图中 Flink 是核心的计算引擎,负责清洗日志、统计报表。

三、场景实践

3.1 ODS - 日志消费负载均衡

ODS 业务中,请求日志量级大,其他日志量级小。这样请求日志(request_topic)在 Kafka 上分区多,曝光和点击日志(impress/click_topic)分区少。

最初是采用单 source 的方法,创建一个 FlinkKafkaConsumer011 消费所有分区,这可能导致 task 消费负载不均。同一 topic 的不同分区在 task 上可均匀分配,但不同 topic 的分区可能会被同一 task 消费。期望能达到的消费状态是:量级大的 topic,其 task 和 partition 一一对应,量级小的 topic 占用剩下的 task。

解决方法是把单 source 的消费方式改成了多 source union 的方式,也就是创建了两个 consumer,一个 consumer 用来消费大的 topic,一个 consumer 用来消费小的 topic,并单独为它们设置并行。

3.2 DWD - 日志关联及状态缓存

DWD 是业务模型层,需要实现的一个关键逻辑是日志关联。基于 sid 关联广告一次生命周期中的不同行为日志。业务模型记录了 sid 级别的维度和指标。

最初是基于 30s 的 window 来做关联,但这种方式会导致模型输出较第一次事件发生延迟有 30s,并且 30s 仅能覆盖不到 12% 的曝光日志。如果扩大窗口时间则会导致输出延迟更多,并且同一时刻存在的窗口随时间增长,资源消耗也比较大。

后续改成了基于状态缓存的方式来实现日志关联,即 ValueState。同一 sid 下的日志能够访问到相应的 ValueState。不过为保证及时输出,将请求、曝光、点击等不同指标,拆分到了多条数据中,输出的数据存在冗余。

随着业务的增长和变化,需要缓存的状态日益变大,内存已无法满足。于是我们将状态从内存迁移至 HBase 中,这样做的好处是支持了更大的缓存,并且 Flink checkpoint 负载降低。但同时也带来了两个问题:引入第三方服务,需要额外维护 HBase;HBase 的稳定性也成为计算链路稳定性的重要依赖。

在 HBase 状态缓存中,遇到一个数据倾斜的问题,某条测试 sid 的曝光重复上报,每小时千次量级。如上图,该条 sid 对应的状态达到 MB 级别,被频繁的从 HBase 中取出并写回,引起频繁的 gc,影响所在 task 的性能。解决办法是根据业务逻辑对 impress 进行去重。

3.3 DWS - 实时 OLAP

在 DWD 层基于 Flink 的事件驱动已经实现了实时模型,再由 Flink 来消费处理实时模型,从中提取出维度和指标,然后逐条的向后输出。在这个过程中已是能输出一个实时 OLAP 的结果了,但也需要有个后端的存储来承接,我们因此引入了 Druid。Druid 可以支持数据的实时摄入,并且摄入的结果实时可查,也可以在摄入的同时做自动的聚合。

上图左侧:每张表需要启动常驻任务等待 push 过来的数据。常驻任务被动接收数据,易被压崩;常驻任务异常重启麻烦,需要清理 zk 状态;常驻任务的高可用依赖备份任务,浪费资源。

上图右侧:一张报表对应一个 Kafka 消费任务。消费任务自己控制摄入速率更加稳定;任务可依赖 offset 平滑的失败自启。

3.4 ADS - 跨源查询

Presto 是分布式的 SQL 查询引擎,可从不同的数据源抽取数据并关联查询。但会带来 Druid 的下推优化支持不完善的问题。

3.5 流批混合现状

如上图所示是 Lambda 大数据框架,流式计算部分是 Kafka+Flink,批处理则是 HDFS+Spark。

流式计算的特点:

  • 响应快,秒级输出;
  • 可重入性差,难以重复计算历史日志;
  • 流的持续性重要,异常需迅速介入。

批处理的特点:

  • 响应慢,小时级输出;
  • 可重入性好,可重复计算历史数据;
  • 数据按小时粒度管理,个别异常可从容处理。

流批混合痛点:

  • 两遍日志清洗的计算量;
  • 两套技术框架;
  • 数据一致性问题。

四、未来展望

流批混合优化,直接将实时模型输出到 HDFS。

好处是:

  • 避免了对日志的重复清洗;
  • 统一了建模的技术框架;
  • 支持延迟数据对模型的更新。

但也有以下两个问题:

  • 实时模型重复,量级更大,计算消耗大;
  • 支持数据更新的技术如 Hudi,会改变模型的使用方式,对后续使用者不友好。

最后聊一下对 Flink-SQL 的想法:检索近 10 分钟的某条异常日志、快速评估近 10 分钟新策略的效果都属于即时、微批、即席查询。批处理链路小时级响应太慢;实时检索系统如 ES,资源消耗大。可以利用 Kafka + Flink-SQL 解决上述问题,Kafka + Flink-SQL 也是今后计划尝试的方向。

点击查看直播回放 & 演讲PDF

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用网络文章开启本课程的开篇: 在大数据分析领域中,传统的大数据分析需要不同框架和技术组合才能达到最终的效果,在人力成本,技术能力和硬件成本上以及维护成本让大数据分析变得成为昂贵的事情。让很多中小型企业非常苦恼,不得不被迫租赁第三方大型公司的数据分析服务。  ClickHouse开源的出现让许多想做大数据并且想做大数据分析的很多公司和企业耳目一新。ClickHouse 正是以不依赖Hadoop 生态、安装和维护简单、查询速度快、可以支持SQL等特点在大数据分析领域越走越远。  本课程采用全新的大数据技术栈:Flink+ClickHouse,让你体验到全新技术栈的强大,感受时代变化的气息,通过学习完本课程可以节省你摸索的时间,节省企业成本,提高企业开发效率。本课程不仅告诉你如何做项目,还会告诉你如何验证系统如何支撑亿级并发,如何部署项目等等。希望本课程对一些企业开发人员和对新技术栈有兴趣的伙伴有所帮助,如对我录制的教程内容有建议请及时交流。 课程概述:在这个数据爆发的时代,像大型电商的数据量达到百亿级别,我们往往无法对海量的明细数据做进一步层次的预聚合,大量的业务数据都是好几亿数据关联,并且我们需要聚合结果能在秒级返回。  那么我们该如何实现这一需求呢?基于Flink+ClickHouse构建电商亿级实时数据分析平台课程,将带领大家一步一步从无到有实现一个高性能的实时数据分析平台,该系统以热门的互联网电商实际业务应用场景为案例讲解,对电商数据的常见实战指标以及难点实战指标进行了详尽讲解,具体指标包括:概况统计、全站流量分析、渠道分析、广告分析、订单分析、运营分析(团购、秒杀、指定活动)等,该系统指标分为分钟级和小时级多时间方位分析,能承载海量数据的实时分析,数据分析涵盖全端(PC、移动、小程序)应用。 本课程凝聚讲师多年一线大数据企业实际项目经验,大数据企业在职架构师亲自授课,全程实操代码,带你体验真实的大数据开发过程,代码现场调试。通过本课程的学习再加上老师的答疑,你完全可以将本案例直接应用于企业。 本套课程可以满足世面上绝大多数大数据企业级的海量数据实时分析需求,全部代码在老师的指导下可以直接部署企业,支撑千亿级并发数据分析。项目代码也是具有极高的商业价值的,大家可以根据自己的业务进行修改,便可以使用。  本课程包含的技术: 开发工具为:IDEA、WebStorm Flink1.9.0 ClickHouseHadoop2.6.0 Hbase1.0.0 Kafka2.1.0 Hive1.0.0 Jmeter(验证如何支撑亿级并发)Docker (虚拟化部署)HDFS、MapReduce Zookeeper SpringBoot2.0.2.RELEASE SpringCloud Finchley.RELEASE Binlog、Canal MySQL Vue.js、Nodejs Highcharts Linux Shell编程  课程亮点: 1.与企业对接、真实工业界产品 2.ClickHouse高性能列式存储数据库 3.大数据热门技术Flink新版本 4.Flink join 实战 5.Flink 自定义输出路径实战 6.全链路性能压力测试 7.虚拟化部署 8.集成指标明细查询 9.主流微服务后端系统 10.分钟级别与小时级别多时间方位分析 11.数据库实时同步解决方案 12.涵盖主流前端技术VUE+jQuery+Ajax+NodeJS 13.集成SpringCloud实现统一整合方案 14.互联网大数据企业热门技术栈 15.支持海量数据的实时分析 16.支持全端实时数据分析 17.全程代码实操,提供全部代码和资料 18.提供答疑和提供企业技术方案咨询 企业一线架构师讲授,代码在老师的指导下企业可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。 
用户画像,作为一种勾画目标用户、联系用户诉求与设计方向的有效工具,用户画像在各领域得到了广泛的应用。用户画像最初是在电商领域得到应用的,在大数据时代背景下,用户信息充斥在网络中,将用户的每个具体信息抽象成标签,利用这些标签将用户形象具体化,从而为用户提供有针对性的服务。还记得年底收到的支付宝年度消费账单吗?帮助客户回顾一年的消费细节,包括消费能力、消费去向、信用额度等等,再根据每位客户的消费习惯,量身定制商品推荐列表……这一活动,将数据这个量化的词以形象生动的表现手法推到了大众面前。这就是用户画像在电商领域的一个应用,随着我国电子商务的高速发展,越来越多的人注意到数据信息对于电商市场的推动作用。基于数据分析的精准营销方式,可以最大限度的挖掘并留住潜在客户,数据统计与分析为电商市场带来的突破不可估量。在大数据时代,一切皆可“量化”,看似普通的小小数字背后,蕴藏着无限商机,也正在被越来越多的企业所洞悉。如何从大数据中挖掘商机?建立用户画像和精准化分析是关键。什么是用户画像呢?用户画像是根据市场研究和数据,创建的理想中客户虚构的表示。创建用户画像,这将有助于理解现实生活中的目标受众。企业创建的人物角色画像,具体到针对他们的目标和需求,并解决他们的问题,同时,这将帮助企业更加直观的转化客户。用户画像最重要的一个步骤就是对用户标签化,我们要明确要分析用户的各种维度,才能确定如何对用户进行画像。用户画像建立步骤首先,基础数据收集,电商领域大致分为行为数据、内容偏好数据、交易数据,如浏览量、访问时长、家具偏好、回头率等等。而金融领域又有贷款信息,信用卡,各种征信信息等等。然后,当我们对用户画像所需要的基础数据收集完毕后,需要对这些资料进行分析和加工,提炼关键要素,构建可视化模型。对收集到的数据进行行为建模,抽象出用户的标签。电商领域可能是把用户的基本属性、购买能力、行为特征、兴趣爱好、心理特征、社交网络大致的标签化,而金融风控领域则是更关注用户的基本信息,风险信息,财务信息等等。随后,要利用大数据的整体架构对标签化的过程进行开发实现,对数据进行加工,将标签管理化。同时将标签计算的结果进行计算。这个过程中需要依靠Hive,Hbase等大数据技术,为了提高数据的实时性,还要用到Flink,Kafka等实时计算技术。最后,也是最关键的一步,要将我们的计算结果,数据,接口等等,形成服务。比如,图表展示,可视化展示。基于Flink+Alink构建全端亿级实时用户画像系统课程,将带领大家一步一步实现一个强大的实时用户画像系统,该系统以热门的互联网电商实际业务应用场景为案例讲解,具体包含:标签管理(支持动态标签扩展,动态标签指标)、用户预测、用户群体画像、用户行为画像、用户中心、几大内容。本课程采用全新的大数据技术栈:Flink+Alink,让你体验到全新技术栈的强大,感受时代变化的气息,通过学习完本课程可以节省你摸索的时间,节省企业成本,提高企业开发效率。本课程包含的技术: 开发工具为:IDEA、WebStorm Flink1.13.0Alink1.5.0 ClickHouseDolphinSchedulerHadoopHbaseKafkaZookeeper SpringBoot2.0.8.RELEASE SpringCloud Finchley.SR2BinlogCanal MySQL MybatisVue.js、Nodejs、ElementUI 课程亮点: 1.与企业接轨、真实工业界产品2.标签化管理模块功能,支持动态标签扩展3.动态标签指标分析和维护4.Alink算法技术框架 5.大数据热门技术Flink新版本 6.主流微服务后端系统 7.数据库实时同步解决方案 8.涵盖主流前端技术VUE+NodeJS+ElementUI 9.集成SpringCloud实现统一整合方案 10.互联网大数据企业热门技术栈 11.支持海量数据的实时画像 12.支持全端实时画像 13.全程代码实操,提供全部代码和资料 14.提供答疑和提供企业技术方案咨询 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值