双十二大屏容灾方案
双十二实时订单大屏上线方案
订单实时大屏,是数据团队实时计算能力的呈现,也是实时计算全链路打通并准备上线的第一个项目,同时也涉及到数据产品、数据同步中间件、塔内 Flink 平台、DataV 等多方协作与努力,为了让整个链路稳定运行,规避风险,容错保障,让实时大屏在经受住双十二期间流量的考验及对产品的检验,提出此方案。
以下是大屏实时任务部分关键节点:

下图为数据流传递,各组件、任务整体流程,涉及关键节点为标黄部分

一、同步中间件
Java 同步中间件,拉取 SQL Server 业务库数据,根据 ts 变化,通过定时拉取,间隔 1-2 分钟,无法做到数据精准拉一次,存在数据重复。
物化数据链路:

风险点:
- 数据延迟增加:目前 Top10 ,12min~178min(可调整),99%延迟 1 分钟内。数据双十二数据激增,业务库压力较大的情况下,调大拉取间隔,或超过 2 分钟。
- 数据重复率:目前的情况看,重复率约占百分之三十,任务异常中断或停止,分析具体原因,手动回拉跨度不确定
保障方案:
- 10 分钟自动恢复
- 人工干预预案……(需要补充,信息对齐)
二、Flink 任务:
1. Flink 去重 Jar 包(无状态任务)
读取 kafka 中订单源表数据,根据 co_id,o_id,ts 三个字段去重,业务状态外置到 Aerospike,无状态任务,容错率高。
数据物化链路:

任务最低资源配置(临界点,低于这个值,日常流量会产生挤压)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| 1C1G | 24P*2C4G24P*1 | 2W/s | 1W/s | 1W |
正常推荐配置:
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| 1C1G | 24P*2C8G24P*1 | 2W/s | 1W/s | 1W |
双十二推荐配置:
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| 1C1G | 24P*4C16G24P*1 | 2W/s | 0.7W/s | 1W |
2. SQL 维表关联中间层(无状态任务)
读取去重表数据,关联维度表信息,丰富订单信息,无状态任务,容错率高。
物化数据链路:

- 任务风险点:
- 维表信息变化不及时/维表信息关联更新
任务最低资源配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
正常推荐配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
双十二推荐配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
3. SQL 结果层-平台、省份、物流维度 统计结果层(大状态任务)
读取明细中间层数据,根据大屏统计指标计算结果,结果写入 hologres,需要保留当天订单数的状态。
物化数据链路:

任务最低资源配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
正常推荐配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
双十二推荐配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
4. SQL 结果层-每秒折线图及核心指标(大状态任务)
读取明细中间层数据,根据大屏统计指标计算结果,结果写入 hologres,需要保留当天订单数的状态。
物化数据链路:

任务最低资源配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
正常推荐配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
双十二推荐配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
5. SQL 结果层-创建订单数(大状态任务)
读取明细中间层数据,根据大屏统计指标计算结果,结果写入 hologres,需要保留当天订单数的状态。
物化数据链路:

任务最低资源配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
正常推荐配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
双十二推荐配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
6. DataStream 结果层(大状态任务)
读取明细中间层数据,根据大屏统计指标计算结果,结果写入 hologres,需要保留当天订单数的状态。
物化数据链路:

任务最低资源配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
正常推荐配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
双十二推荐配置(待完善…)
| JM 资源配置 | TM 资源配置 | 吞吐量峰值 | 日常均值 | 单 CPU 处理能力(仅供参考) |
|---|---|---|---|---|
| - | - | - | - | - |
Flink 任务容错
无状态任务
风险点:
- 流量激增:评估资源,预留 buffer,背压自适应
- 脏数据容错率导致任务中断
- 平台稳定性:未知风险
保障方案:
- 钉钉告警
- 观察图表性能指标
容灾恢复
- 从 savepoint 恢复,自动重启平台任务启动时间 2 分钟/人工干预重启恢复 5 分钟内
- 丢失 checkpoint,人工干预,指定 timestamp offset 重复消费,人工重启 2~10 分钟
有状态任务
风险点:
- 流量激增:评估资源,预留 buffer,背压自适应
- 脏数据容错率导致任务中断
- 平台稳定性:未知风险
保障方案:
- 钉钉告警
- 观察图表性能指标
容灾恢复
- 自动重启成功,单次重启耗时 5 分钟起步,具体还要看状态累计的时间
- 自动重启失败,人工干预,会丢失 checkpoint,指定 timestamp offset 重复消费,无法从状态恢复,必须从当天 0 点开始追数据,增加资源追数据
三、 DataV 容错
目标:双十二,结果层会有双跑容错,会向 holo 写两套数据,表结构相同,不需要改造 SQL,表名不一样,DataV 需要对接两套数据,大屏走数异常,在紧急情况下可以进行无感切换
保障方案:
- 双十二值班观察大屏动态
容灾恢复
- 切换版本,重新发布?……(需要补充)
四、容错链路

五、值班计划
待完善…
六、总结
截至目前 12 月 4 日(周六),个人判断最大的风险点
- 来自于对阿里云 Flink 可控能力较弱,问题锁定难
- 比如监控数据突然没有,并没有给出原因
- 比如异常退出原因,并没有合理解释或者建议,问题排查困难
- 任务稳定性:
- 几个大状态统计任务稳定性,有出现 TM 异常退出、checkpoint 失败风险
- 对于异常退出,阿里 Flink 平台重启策略可能会导致任务需要追天级别的数据(最坏的情况)
