使用 Flink SQL 进行实时性能监控:AdTech 用例

背景

广告技术(Ad Tech)是一种统称,描述了用于管理和分析程序化广告活动的系统和工具。数字广告的目标是尽可能覆盖尽可能多的相关受众。因此,广告技术本质上与处理大量数据相关。

在这篇博文中,我们将研究如何关联两个事件流——广告投放(所谓的展示次数)和点击次数,并计算一个重要的广告技术指标——点击率(CTR)。我们的计算将使用 Apache Flink 的水平可扩展执行引擎根据运行中的数据进行。我们将专注于获得结果,而不用 Java 或 Scala 编写任何代码,而是完全依赖 SQL。

典型场景

在典型场景中,广告的投放是通过称为实时出价的机制执行的。从本质上讲,实时出价是一种拍卖,众多参与者竞相向特定最终用户展示横幅或视频(统称为创意)。在此过程中,需求方平台 (DSP) 获得向用户展示广告的服务,通过用户的设备 ID 进行识别并回复他们的投注。

 

虽然投放广告的过程在很大程度上是自动化的,但广告活动经理和业务分析师通常仍然采用很大程度的手动控制。通常,活动的定义和受众选择器(例如人口统计数据、原籍国以及活动的绩效标准)都是手动定义的。密切监视活动的表现并调整某些参数可能是必要的,特别是在发布后的早期阶段 – 验证假设的时间。

为什么选择流处理?

传统上,通过以下方式解决洞察大量数据的任务:利用批处理。这种方法与数字广告业务的高度动态性质相矛盾。实时获取洞察至关重要 – 等待一个小时或更长时间来完成定期批处理作业来完成原始数据的处理,同时由于活动的初始参数错误而耗尽预算,这是非常不可取的。此外,对于任何依赖于关联两个后续事件的指标,批处理不会为位于批处理“截止”相反两侧的事件提供正确的结果,因此会由两个不同的批处理作业进行处理。

为什么选择 Flink SQL?

监视活动的任务通常由数据分析师或业务分析师执行。由于业务的动态性质,可以预期与新数据源的潜在临时集成、向现有数据流添加新维度以及其他类似的调整。在这种情况下,希望消除数据分析师在执行日常任务时对数据工程师的依赖。为了实现这一目标,需要一个采用门槛较低的灵活工具集。 SQL 是数据分析的通用语言,其知识非常广泛。在 Flink 中运行 SQL 语句可以让您利用 Flink 水平可扩展流处理引擎的强大功能,而无需成为 Java 或 Scala 开发人员。它可以轻松地利用大量原始飞行数据,并以自助服务方式促进交互式自定义仪表板的创建。

实践

在我们的示例中,我们将使用两个数据流。首先,通过定义其架构和表选项,将这些流注册为表。第一个流是印象流。这些事件中的每一个都表明实时竞价拍卖的胜利以及成功向用户展示创意。它包含广告素材的维度、国家/地区代码和广告活动 ID 等详细信息。

创建临时表“印象数”

CREATE TEMPORARY TABLE impressions (
  bid_id VARCHAR NOT NULL,
  `timestamp` VARCHAR,
  serve_time AS TO_TIMESTAMP(`timestamp`, 'EEE MMM dd HH:mm:ss zzz yyyy'),
  campaign_id INT,
  creative_dimensions VARCHAR,
  country_code VARCHAR(2),
  serve_time AS serve_time - INTERVAL '5' SECOND
)
WITH (
  'connector' = 'kafka',
  'format' = 'json',
  'properties.bootstrap.servers' = 'kafka.svc:9092',
  'properties.group.id' = 'impressions

关注公众号“大模型全栈程序员”回复“大数据面试”获取800页左右大数据面试宝典 ,回复“大数据”获取多本大数据电子书

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627