【广告行业】基于Flink的广告行业实时数仓建设

一、建设背景

广告是目前互联网流量变现的一种重要手段,广告投放的优化很大程度上依赖于广告效果数据,依托于广告曝光、点击、消耗、订单等指标调整广告投放策略,以达到最优投放效果。前期主要提供T+1效果数据,投放策略往往需要第二天才能做出调整,不能及时做出投放优化,特别在一些大促场景,实时优化显得尤为重要,需要及时调整例如人群、地域、出价等策略,以此为背景建设实时数据链路。

目前实时数据的场景主要有以下几种:

实时大屏:提供给运营、产品使用,展示核心的业务指标:曝光、点击、消耗等数据。

实时特征:提供给算法使用,统计用户维度的行为数据。

商家看板:提供给商家使用,展示商家的在不同维度的曝光、点击、消耗等数据。

多维分析:提供给运营、分析师使用,实时分析广告数据。

二、技术架构

依托新一代实时计算引擎Flink的兴起,在超高性能、数据一致性保障、SQL化编程方式等特点下推动了实时数仓的发展。

当前的整体技术架构图如下:

在数据源侧:一方面服务器日志数据与MySQL变更数据作为数仓的数据源,会被采集消息队列Kafka中;另外一方面MySQL 中的数据会通过DataX离线方式同步到HBASE中,通常是在维度建设初始化使用;

在数据加工侧:使用Flink作为计算引擎,HBASE作为维表存储数据库,Flink任务在处理的过程中会做一些数据解析、规范化、打宽、聚合等操作;

在数据服务侧:使用两种不同的存储引擎HBASE与Hologres,HBASE提供KV查询,应用于实时大屏、商家看板等固化查询场景, Hologres用于在线分析,应用于多维分析等场景,提供多维分析能力。二者由统一数据接口服务封装,对外提供查询。

三、数仓架构

数仓的分层搭建需要从复用、成本、质量、扩展性等方面去考虑,实时数仓的搭建,包括层次划分、命名、主题域划分、数据域划分与离线相差不大,目前划分层次如下:

数据源层:DB日志与服务器日志,DB日志数据主要是广告商家、投放计划等物料数据;服务器日志是广告引擎曝光日志、广告点击日志、用户真实曝光日志;按照不同的业务属于又可以分为搜索广告日志、推荐广告日志。

中间层:分为DIM层与DWD层,DIM层即维度层,其数据来源于DB日志,通过离线全量+实时增量方式完整同步操作;明细层DWD建设很重要的一个要求就是能够被复用,因此将搜索、推荐广告日志做了水平合并供下游多方使用,另外一个是维度扩充,提前做维表信息关联,避免下游多次join操作。

应用层:按照应用场景划分为实时大屏、商家后台实时指标、实时特征、实时多维分析,提供了不同维度的曝光、点击、消耗等数据。

从当前分层架构来说,可以说与离线分层上有两个差异:

  • 层次更少:离线中会存在汇总层与集市层,但是对于实时来说层次越多延时就越大,另外问题排查的难度就越大;

  • 注重维度整合:离线中一般情况下大宽表出现在集市层,但是对于实时来说,在构建DWD层已经完成了维度整合操作,避免下游join操作,也就是通过空间换时间的策略。

四、实时OLAP

当前使用OLAP主要解决两方面的问题:

  • 运营对于广告数据需求的多变性

运营对数据的需求变化性常常是大于广告商家看数的需求,如果都是使用Flink进行预计算完成的指标,那么其开发、运维成本是非常高的;

  • 对mysql中的数据需要某个时间点的分析结果指标

mysql中的数据是可变的,经常会执行一些update操作,例如广告预算数据,预算是可实时变更的,需要知道每小时整的预算额。使用Flink去处理这类问题成本比较高、并且也不可复用。

基于以上问题,提出了实时OLAP的架构:

 将明细数据通过Flink处理写入OLAP中,基于OLAP一方面完成在线数据查询,另外一方面通过离线调度处理OLAP中数据,进行一个简单的分层处理,最终提供给上层查询服务使用。

五、实时保障

整个实时数据体系保障,可分为稳定性保障、数据质量保障两个方面。

5.1 稳定性保障

稳定性保障目前主要从压测、任务等级划分、 监控三方面实施:

  • 提前压测:应对流量高峰期,特别是大促场景下,提前做好资源保障、任务优化等措施。
  • 制定保障等级:从任务影响面大小、数据使用方来划分,一般情况公司层面优先于部门层面,外部使用优先于内部使用,  高优先级任务需要优先/及时响应、必要情况下做双链路保障机制;
  • 指标监控:监控任务failover情况、checkpoint指标、GC情况、作业反压等,出现异常告警。

5.2 数据质量保障

质量保障主要是保障数据正确性与时效性。

正确性

实时计算端到端的一致性,对数据正确性的影响,常用手段就是通过输出幂等方式保障,这种方式要求输出使用存储介质支持重写,对于不支持幂等的存储,比较常用的就是DWD层的kafka, 可能会产生重复的数据,那么在下游使用的时候可以使用row_number() 语法进行去重,保证相同的key不会被多次计算;

离线与实时的一致性,需要保证使用数据源一致、加工业务逻辑一致。

时效性

保障实时指标的时效性,常用的手段就是提前压测与监控。

提前压测:提前发现可能会影响任务处理速度的瓶颈,常见的就是数据倾斜、大状态的算子操作(join);

监控:监控任务当前的消费进度,在数据源处通过使用数据时间与当前系统时间对比判断其消费进度。

六、未来规划(存在的问题)

6.1 实时DWS层建设

当前虽然做了统一DWD层的建设,但是在应用层商家看板、实时特征等的场景应用中,仍然存在重复建设的工作,例如小时维度的商品曝光指标被多个链路重复计算,这种存在数据一致性的风险,另外也会造成资源浪费,可以将公共的汇总指标抽象出来统一计算,建设DWS层。

6.2 实时OLAP的深度应用

当前OLAP的应用场景主要是运营侧使用,但是对于商家侧看板数据也可以做进一步的应用。目前商家看板数据使用HBASE作为存储,然而实际的看数需求是需要排序、分页等操作,这个功能的实现大多数是通过将数据查询出来,然后基于内存去处理,这种方式开发成本高、不易维护,可通过OLAP天然支持排序、分页去解决这些问题。

6.3 基于Hologres的HASP架构简化数仓架构

Hologres 是阿里巴巴自主研发的一款交互式分析产品,其重要的理念就是HASP, 即hybrid serving/analytical processing,服务分析一体化,通过其行存结构提供高频kv查询,列存结构提供多维分析能力。可使用Hologres替换HBASE, 简化整个技术架构链路。

七、总结

该文章讲述了广告行业业务实时数仓建设,可以了解到广告的数据产品的应用场景:实时大屏、实时特征、商家看板、多维分析。同时逻辑非常清晰讲述数据的加工链路、实时数仓的建设过程、实时OLAP的解决方式、如何做到实时保障。这些知识为实时数仓建设提供非常好的参考!

参考资料:

微信公众号《Flink实战剖析》-《AliExpress基于Flink的广告实时数仓建设》

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值