Flink实战六之Flink在广告业务场景中的应用
·
前言

Flink 利用 MySQL 完成「数据输入 / 输出 / 状态存储」,结合广告等业务场景,核心工作可分为「数据读取」「数据写入」「状态持久化」三类,每类都对应具体的业务价值,我会结合广告场景讲清楚每类工作的用途和落地方式。
一、核心工作 1:读取 MySQL 数据(作为 Flink 的数据来源)
Flink 从 MySQL 读取数据分为「离线批读取」和「实时流读取(CDC)」,是广告场景中获取业务基础数据的核心方式:
1. 离线批读取(一次性加载)
- 工作内容:Flink 作为批处理引擎,通过 JDBC 一次性读取 MySQL 中的静态数据 / 历史数据;
- 广告场景用途:
- 加载广告投放规则(如
ad_rule表):Flink 作业启动时,批量读取所有生效的广告竞价规则、定向规则,加载到内存 / 状态中,供实时竞价使用; - 加载历史归因数据:离线统计过去 7 天的广告转化数据,用于复盘投放效果;
- 数据初始化:Flink 状态后端初始化时,从 MySQL 加载初始状态(如广告累计曝光量)。
- 加载广告投放规则(如
- 核心价值:获取静态 / 历史业务数据,为实时计算提供基础规则 / 初始状态。
2. 实时流读取(CDC 变更捕获)
- 工作内容:Flink CDC 监听 MySQL binlog,实时捕获表数据的 INSERT/UPDATE/DELETE 变更,转为流数据供 Flink 处理;
- 广告场景用途:
- 实时同步广告规则:运营修改
ad_rule表中的竞价价格、定向人群后,Flink 实时感知变更,更新内存中的规则缓存,保证竞价逻辑用最新规则; - 实时同步用户画像:用户标签(如「高消费用户」)在 MySQL 中更新后,Flink 实时捕获,用于广告精准投放;
- 实时同步订单数据:用户下单后,MySQL 订单表变更被捕获,Flink 实时关联广告点击记录,完成归因。
- 实时同步广告规则:运营修改
- 核心价值:打破「数据静态存储」的限制,让 MySQL 中的业务数据变更实时流入 Flink,支撑广告场景的实时决策。
二、核心工作 2:写入 MySQL 数据(作为 Flink 的计算结果落地)
Flink 将实时 / 离线计算的结果写入 MySQL,是广告场景中数据持久化、供下游使用的核心方式:
1. 实时指标落地
- 工作内容:Flink 实时计算广告曝光量、点击量、点击率等指标,通过 JDBC Sink 写入 MySQL 报表表;
- 广告场景用途:
- 实时报表:运营后台从 MySQL 读取指标,展示广告实时投放大盘;
- 计费结算:广告实时计费数据写入 MySQL,作为后续与广告主结算的依据;
- 数据监控:MySQL 中的指标触发告警(如某广告点击率低于阈值)。
- 核心要求:必须保证「幂等写入」(如
ON DUPLICATE KEY UPDATE),避免广告计费重复 / 错误。
2. 离线结果落地
- 工作内容:Flink 离线批处理的结果(如日 / 周广告账单)写入 MySQL;
- 广告场景用途:生成广告主的月度结算账单,供财务对账。
- 核心价值:将 Flink 计算的结果持久化到 MySQL,供业务系统(如结算系统、运营后台)读取使用。
三、核心工作 3:状态持久化(MySQL 作为 Flink 状态后端)
- 工作内容:Flink 将计算过程中的状态(如窗口内的广告 UV 数据、用户最近点击记录)持久化到 MySQL(替代默认的内存 / RocksDB);
- 广告场景用途:
- 高可用状态存储:避免 Flink 作业重启后状态丢失,保证广告 UV 统计不重置;
- 状态共享:多个 Flink 作业共享 MySQL 中的状态数据(如不同作业都读取广告累计曝光量)。
- 核心价值:提升状态的持久性和共享性,适配广告场景「数据不丢、状态可复用」的需求。
四、Flink 连接 MySQL 的典型工作流程(广告场景完整链路)

- MySQL 中的广告规则、用户画像通过 CDC 实时流入 Flink;
- Flink 结合 Kafka 中的广告点击流,实时计算曝光 / 点击 / 转化指标;
- 计算结果写入 MySQL 报表表 / 计费表,供运营 / 结算使用;
- Flink 离线读取 MySQL 历史数据,完成投放效果复盘,结果落地到 MySQL。
总结
Flink 连接 MySQL 的核心工作可总结为 3 点:
- 读数据:离线读取静态规则 / 历史数据,实时 CDC 捕获业务数据变更,为计算提供输入;
- 写数据:将实时 / 离线计算的广告指标、计费数据写入 MySQL,实现结果持久化;
- 存状态:将 Flink 计算状态持久化到 MySQL,保证状态高可用、可共享;
- 核心价值:让 MySQL 的「静态存储能力」与 Flink 的「实时计算能力」结合,支撑广告场景的实时竞价、精准归因、计费结算等核心业务。
简单来说,MySQL 是广告业务数据的「存储底座」,Flink 是「计算引擎」,两者连接后,实现了「数据存储→实时计算→结果落地」的完整链路,这也是广告部门使用 Flink+MySQL 的核心原因。
更多推荐
所有评论(0)