当前位置: 首页 > news >正文

广告系统中后链路数据为什么要使用流批一体技术?流批一体技术是什么?

在大规模广告系统的后链路(离线和实时特征计算、模型训练与上线、效果监控等)中,往往既有对海量历史数据的批量计算需求(离线特征、离线模型训练、报表汇总),又有对在线请求的低延迟实时计算需求(实时特征、在线打分、实时监控/告警)。传统将二者割裂、用 Lambda 架构(Batch + Speed 层)分别实现,带来了:

• 代码与业务逻辑重复
• 数据语义/计算结果不一致
• 运维成本、调度复杂度翻倍
• 开发调试效率低

流批一体技术(Streaming + Batch Unified)正是在这个场景下应运而生,用以打通“离线 ↔ 实时”两条腿,统一底层引擎、统一 API、统一数据语义、统一运维调度,从而大幅降低系统复杂度并提升实时性与一致性。

以下从“概念”、“核心能力”、“关键技术点”以及“在广告后链路的价值”四个角度做详细介绍。

一、流批一体技术概念

  1. 统一计算引擎
    – 同一套计算框架即可处理有界(Batch)与无界(Stream)数据
    – 统一抽象:数据流(DataStream)、表/SQL(Table & SQL)等
  2. 统一编程模型
    – 同一份代码/同一套 API(如 Flink 的 DataStream & Table API、Spark Structured Streaming & Spark SQL、Beam)
    – 业务逻辑“一次编写、实时/离线皆可跑”
  3. 统一时间语义
    – 事件时间(Event Time)驱动,Watermark + Window 机制同时支持离线全局聚合和实时滑动/滚动窗口
  4. 统一容错与状态管理
    – Checkpoint & Savepoint(或 Write-Ahead Log)保证 Exactly-once
    – 支持大规模状态(State Backend,RocksDB、FsStateBackend 等)

二、核心能力与关键技术点

  1. 统一数据接入与存储
    – 实时:Kafka、RocketMQ、Pulsar 等消息队列
    – 离线:HDFS、Object Store(S3、OSS)、Iceberg/​Hudi/Delta-Lake 等
    – 上层统一视图、catalog 管理
  2. 事件时间+Watermark
    – 精确处理乱序数据、支持窗口聚合、状态清理
    – 同一套 Window 既可做一次性全量聚合(离线),也可做增量/滑动窗口(实时)
  3. 状态管理与容错
    – StateBackend(内存 / RocksDB)管理算子状态
    – Checkpoint / Savepoint / 难停机升级
    – 一次写入多端(消息队列、数据库、紧急告警)
  4. 高吞吐与低延迟调优
    – 算子并发度、资源隔离、背压(Backpressure)控制
    – 存储层冷热分离:Redis/​HBase(在线)+Parquet/Hudi(离线)
  5. 统一 SQL 层与批处理接口
    – SQL on Stream + SQL on Batch:同一份视图/同一张表写离线任务即刻可查询
    – 支持流式 joins(特征合并)、维表关联
  6. Dev & Ops 一体化
    – CI/CD:Job 参数化、统一打包、灰度发布
    – 统一监控 & 告警:Checkpoint 时长、延迟、后端存储 IO、状态大小

三、在广告后链路的应用价值

  1. 实时特征计算与在线特征仓库
    – 实时统计用户点击、曝光、转化等指标补全最新特征
    – 离线批量计算多天滚动特征、标签,实时合并,保证预测时特征齐全且最新
  2. 在线实时实时打分/竞价
    – 单条请求的 Feature Preparation、Model Inference 达到 ms 级
    – 在同一个 Job 中既可离线更新模型版本,也可实时切流打分
  3. 离线模型训练与实时模型更新(Data Drift)
    – 批量训练:历史 N 天数据训练新模型
    – 实时微调:增量数据触发在线模型更新或校准
  4. 实时监控与异常检测
    – 实时流水指标监控(CTR、eCPM、ROI 等)与阈值或 ML 模型告警
    – 离线汇总报表与实时对齐,保证数据口径一致
  5. 降低运维与迭代成本
    – “一次开发、既能部署离线 Batch 集群,也能跑在实时 Stream 集群”
    – 统一 Job 管理、统一调度与监控,减少运维人员负担

四、典型架构示例

  1. 数据接入:Kafka ← 广告曝光/点击/转化事件
  2. 流批一体计算:Apache Flink
    – 实时计算:Window 聚合、在线特征、实时打分
    – 离线计算:有界批读历史 parquet / Iceberg 做全量统计、模型训练数据准备
    – 同一套 Flink Job、Table & SQL 逻辑
  3. 实时存储:Redis/ HBase 作 Online Feature Store / 实时 CTR 缓存
  4. 离线存储:HDFS / Iceberg Otso / Parquet 作 OLAP / 离线报表
  5. 下游:模型训练平台、BI Dashboard、在线竞价系统

总结:
流批一体技术通过“底层统一”、“语义统一”、“运维统一”三大维度,消除了传统 Lambda 架构的技术债和一致性隐患,既能满足广告后链路对海量离线计算的吞吐要求,又能支撑对毫秒级在线特征与打分的时效需求,是现代大规模广告系统不可或缺的核心技术方案。

举个行业内落地的例子

这里以阿里巴巴展示广告实时计算平台为例,说明流批一体技术在广告后链路的落地实践。

  1. 背景与痛点
  • 业务场景:展示广告投放中,需要对用户的历史行为(曝光、点击、转化、搜索等)做离线多天滚动特征计算,用于定期模型训练;同时又要在每次 RTB 请求到来时,做毫秒级的实时特征补全和在线打分。
  • 原有架构:
    • 离线:MaxCompute + MapReduce/Spark,每天跑批计算历史特征和训练样本;
    • 实时:Flink(早期 1.x)或者 Storm + 纯消息队列+Kafka Streams 做在线特征累加;
    • 两套逻辑、两套存储、两套监控,开发迭代慢,一致性难保证。
  1. 流批一体引擎选型
  • 核心引擎:Apache Flink(含 Blink 优化)
  • 特征仓库:
    • 实时写入:Kafka → Flink State(RocksDB) → HBase/Redis Online-Feature Store
    • 离线增量:Iceberg + Flink SQL 作全量和增量批次写入
  1. 统一 Pipeline 实现
    a) DataStream & Table API 统一编程

    • 同一份 Flink Job,注册 Kafka(用户行为流)、Iceberg(历史轨迹表)两个源;
    • 通过 Flink SQL 定义“滚动天窗特征”+“当天滑动窗口特征”+“实时点击率 UV 计数”
    • 代码既可按“有界表”模式跑一次全量(离线训练数据),也可按“无界流”模式持续在线更新。
      b) 统一时间语义、容错与状态管理
    • 事件时间+Watermark 保证窗口计算一致;
    • Checkpoint & Savepoint 支撑流批任务平滑升级;
    • RocksDB StateBackend 存储大规模在线状态,可以同时支撑天级累积和秒级更新。
      c) 存储与下游交付
    • 实时特征推送至 Redis/​HBase ,在线打分系统秒级读取;
    • 离线全量特征写入 Iceberg 表,供 MaxCompute/Model Training 集群批量拉取。
  2. 架构流程示例

  1. 行为数据接入:
    • Kafka 收集曝光、点击、转化、搜索等事件;
    • 离线历史轨迹落到 Iceberg 表(天级 Parquet)。
  2. Flink Job (流批一体):
    • 在 DataStream 上注册 Table:
    CREATE TABLE user_log_stream (…) WITH (‘connector’=‘kafka’, …);
    CREATE TABLE user_log_iceberg (…) WITH (‘connector’=‘iceberg’, …);
    • 使用 Table API/SQL 实时+批特征提取:
    INSERT OVERWRITE iceberg.daily_feature
    SELECT
    user_id,
    TUMBLE_START(event_time, INTERVAL ‘1’ DAY) AS dt,
    COUNT() AS ctr_1d,
    SUM(IF(action=‘click’,1,0))/COUNT(
    ) AS click_rate
    FROM user_log_stream
    GROUP BY user_id, TUMBLE(event_time, INTERVAL ‘1’ DAY)
    ;
    • 同一 Job 部署两种模式:
    – 有界模式(exec.env.execution-mode=BATCH)跑历史全量;
    – 无界模式(执行时去掉该参数)持续消费 Kafka 做增量更新,同时实时输出至 Redis。
  3. 下游模型与竞价:
    • 离线训练平台直接读取 iceberg.daily_feature 构建训练集;
    • 在线竞价系统从 Redis 中秒级读到最新 ctr_1d、click_rate 等实时特征;
    • 模型预测后输出 cpm 值,驱动实时竞价。
  1. 收效与经验
  • 开发效率提升 ≈30%:同一份 SQL/Java 逻辑支撑离线与实时,无需双写;
  • 数据口径一致率 ≈99.9%:Stream 模式与 Batch 模式完全使用同一套 Watermark+Window 语义;
  • 系统运维成本下降 ≈40%:统一 Flink 平台,Checkpoint+Savepoint 支撑平滑升级与故障恢复;
  • 实时特征延迟从原先 200ms 降到 50ms 内,并且和离线批特征自动对齐。

总结:
通过在阿里巴巴展示广告平台上引入 Flink + Iceberg + Redis 的流批一体方案,真正做到了“写一次、实时/离线都跑得通”,大幅降低了代码与运维复杂度,保证了离线批与在线流的结果一致性,并在毫秒级实时特征更新和秒级业务响应上取得了明显提升,是行业内流批一体落地的经典案例。

相关文章:

  • [特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
  • Redis高可用与扩展性:构建稳定高效的缓存系统
  • Qt Widget类解析与代码注释
  • 图像直方图分析:全面掌握OpenCV与Matplotlib绘制技巧
  • python整数处理 2022年信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析
  • ​​​​​​​未来已来:深度解读 BLE 6.0 的革命性特性与实战应用
  • 随笔小记:SpringBoot 3 集成 SpringDoc OpenAPI
  • 计算机毕业设计微信小程序题库系统 在线答题 题目分类 错题本管理 学习记录查询系统源码+论文+PPT+讲解 基于微信小程序的题库系统设计与实现
  • 雨季智慧交通:从车辆盲区到客流统计的算法全覆盖
  • 基于KubeSphere平台快速搭建单节点向量数据库Milvus
  • Telephony 网络数据数据统计
  • 【Mini-F5265-OB开发板试用测评】2、移植MultiButton测试按键
  • linux arm系统烧录
  • Nuxt + Pinia + Element Plus 后台管理系统搭建教程(含源码)
  • idea64.exe.vmoptions配置
  • SecureCRT 中使用 `crt.Session.Config.SetOption` 方法
  • 自己学习原理
  • 第八章 独立看门狗(IWDG)
  • 状态管理详解:Context API、Redux、Recoil 和 Zustand 在 React Native 中的应用
  • Kotlin基础语法一
  • 社交网站建设网/连云港百度推广总代理
  • qq网站建设/自己制作一个网页
  • 如何使用c 进行网站开发/传统营销与网络营销的区别
  • 网站站建设建设中页中页/优化设计三年级上册语文答案
  • 阿里云服务器url做网站/韩国seocaso
  • 做网站标题头像/石家庄最新消息