一、前言
大禹平台是一个离线 Dump 平台。在不同的场景都有自己的 Dump 流程,我们这里的 Dump 特指在搜索、推荐、广告(后续简称 “搜推广”)的场景中,将异构数据源加工处理后给到索引平台做索引的流程。
Dump 流程有如下一些特点:
- 多源异构的数据:包括 MySQL、ODPS、HBase 和 Kafka 等各种数据源。
- 多样化的输出:输出支持搜推广引擎构建倒排索引、Summary 服务构建 kv/kkv 索引等。
- 流批数据结合:一般会有全量和增量,需要保证处理逻辑一致,增量能达到秒级更新。
- 数据处理能力:例如多表 Join、UDF、Filter 等,以方便业务的开发和接入。
离线 Dump 流程
二、项目背景
现状
当前 dump 开发模式
如上图是当前常见的 Dump 开发模式,采用了流批分离架构:流处理通过 DTS 订阅 binlog,由 Flink 消费主表变更事件并反查关联表构建宽表,实现增量更新;批处理则将 MySQL 数据抽取至 ODPS,通过 Spark 处理多源数据并按业务逻辑拼接,最终输出 ODPS 表。这种架构存在以下问题:
当前 dump 开发的问题
目标
依托社区搜索核心场景,构建流批一体化的新质 Dump 架构,实现以下三大核心能力突破:
- 工程效率: 基于可视化 DAG 编排工具,提供低代码开发能力,通过拖拽式界面实现复杂任务流程的快速搭建与迭代,显著降低开发门槛。
- 数据质量: 基于流批一体架构,通过统一逻辑开发范式实现流批数据同源同构,从根本上提升数据准确性与可靠性。
- 稳定性保障: 通过引入镜像表和状态大宽表,提高了数据的查询效率,系统性降低对源库的反查压力,确保系统长期稳定运行。
二、大禹平台介绍
平台设计
系统架构
平台架构
如上图是大禹平台技术架构,底层依赖公司的 DJob Cron 定时任务、Flink/Spark 流批计算能力以及多种存储系统;上层为平台支持的搜推广多种场景业务。
大禹平台分为管理平台与后台系统两部分。管理平台完成处理逻辑的 DAG 开发和相关 Debug、回归验证、监控大盘等能力;后台系统将管理平台的配置转为执行任务,然后依托流批框架生成 Flink/Spark 执行实例,通过调度引擎完成全流程任务执行。
如下图是新版 Dump 流程,将 Dump 拆分为三个阶段:镜像阶段、宽表阶段、导出阶段,以及流、批两种处理模式。新版流程处理过程有如下优化:
- MySQL 镜像至 HBase: 平台将任务依赖的 MySQL 数据统一同步至 HBase 构建镜像层,实现与上游 RDS 解耦。有效规避多任务并发反查导致的数据库压力,支持跨任务共享复用 HBase 镜像表,显著提升数据源稳定性与资源利用率。
- Binlog 订阅平台化: 将 RDS Binlog 订阅流程深度内嵌,自动完成 DTS 订阅创建与 Kafka 资源申请,封装为标准化服务。开发者无需关注底层链路,一键配置即可获取实时变更流,降低接入复杂度,保障流式数据可靠性。
- 状态大宽表消除反查: 基于 HBase 构建持久化状态大宽表,完整记录字段中间状态。任务处理时直接读取状态数据,彻底规避冗余反查逻辑,简化开发流程。
新版 Dump 流程
调度引擎
大禹平台利用得物 DJob Cron 自建调度系统,通过搭建多个 Cron Job 轮训的方式,完成对任务分阶段的处理。
Cron Job 构建调度系统
一个执行实例的全流程
执行框架
在镜像、宽表、导出三个阶段,分别都有对应 Spark 和 Flink 处理框架。其中,镜像阶段完成 MySQL 数据同步,导出阶段完成状态宽表到引擎数据源的导出流程,宽表阶段是具体的业务逻辑实现。
宽表 Spark 框架逻辑: 任务严格遵循 DAG 拓扑顺序,依次执行各算子节点(数据源→业务逻辑→导出)的数据处理流水线,最终通过 BulkLoad 方式将结果高效写入 HBase。
宽表阶段 Spark 框架逻辑
宽表 Flink 框架逻辑: 消费非维表节点的增量,依据节点依赖关系进行拓扑排序后依次执行各节点计算逻辑,将产出字段更新至状态宽表,并实时同步至下游导出链路。
宽表阶段 Flink 框架逻辑
流批一体保障数据质量
平台采用统一的 DAG 编排引擎,将流处理与批处理任务抽象为相同的计算拓扑,从架构层面保障数据源头的天然一致性,彻底规避因不同环境下开发导致的数据偏差风险。同时,平台内置标准化的 UDF(用户自定义函数)开发模板与运行时框架:开发者只需专注业务逻辑实现,编写的 UDF 代码经一次注册,即可无缝嵌入流式与批量处理流程,真正实现 “一次开发、流批复用”,显著提升开发效率,降低维护成本,保障 Dump 开发从数据源头到处理逻辑各环节的流批一致性。
平台通过定义 AlgoDumpUDF 方法类,完成消息类型封装,用户可以利用 UDF 实现数据过滤和驱动删除等逻辑。
public abstract class AlgoDumpUDF implements UDFFunction, Serializable {
//消息类型 add/delete/drop 三种
public AlgoDumpMessageType algoDumpMessageType =
AlgoDumpMessageType.MESSAGE_TYPE_ADD;
@Override
public AlgoDumpMessageType getStatus() {
return algoDumpMessageType;
}
//调用该方法实现增量驱动删除
@Override
public void delete(Object key, String reason) {
this.algoDumpMessageType = AlgoDumpMessageType.MESSAGE_TYPE_DELETE;
}
//调用该方法实现增量过滤
@Override
public void drop(Object key, String reason) {
this.algoDumpMessageType = AlgoDumpMessageType.MESSAGE_TYPE_DROP;
}
/**
* 用户重写该方法完成业务逻辑开发
*/
public void process() throws Exception {
}
}
CASE示例:用户通过重写process()方法, 实现自己的业务逻辑,实现时可以利用drop方法把无效数据过滤,利用delete方法实现对下游索引发送删除消息。
public class MyUdf extends AlgoDumpUDF implements Serializable {
public Tuple2<String, String> process(String id, String taskname)
throws Exception {
//过滤消息
if(StringUtils.isBlank(id)) {
this.drop(id, "drop by id null");
}
//驱动增量删除消息
if(id.equals(0)) {
this.delete(id, "delete by id = 0");
}
//用户写具体业务逻辑
String a1 = "";
if (taskname.equals("dddddd")) {
a1 = "ddd";
}
String b1 = "test";
return new Tuple2<>(a1, b1);
}
}
小全量模式加速数据Dump
大禹支持任务实例按照大全量和小全量两种模式运行,针对部分频繁更新部分字段需求的任务可实现快速加载。
- 大全量: 对数据源执行全量同步重建,生成全新的状态大宽表,并同步刷新流批处理链路,实现数据基准的彻底更新与端到端一致性保障。
- 小全量: 基于现有状态大宽表,仅针对批处理来源字段加载最新数据源快照,经处理后通过 BulkLoad 高效写入 HBase;依托 HBase 多版本特性实现新旧数据平滑切换,确保批处理数据增量更新过程中查询服务零中断、数据时效性与业务连续性兼得。
小全量模式
任务复用支持数据分层管理
大禹平台支持任务产出的双重应用:既可对接计算引擎(如 CEngine),亦可作为公共数据被下游任务高效复用。平台通过标准化的 MirrorOut(导出)与 MirrorIn(接入)算子构建清晰的数据复用链路 —— 上游任务将公共数据配置为 MirrorOut 导出,下游任务通过 MirrorIn 算子一键引用,无需重复开发与数据搬运,实现数据资产的即产即用、任务依赖的显式管理,显著提升开发效率与数据复用性。
任务复用
管理平台
任务开发与运维
管理平台提供一站式任务开发生命周期管理,涵盖任务创建、可视化流程编排、实例调度与资源管控等核心环节;其中,Dump 任务通过可视化编排实现业务配置——用户仅需拖拽算子节点、配置参数,即可直观构建数据处理逻辑,显著提升开发效率与配置准确性。
如下图,通过拖拽算子的方式,可以直观地构建 dump 任务的流程图,实现便捷高效的开发体验。
图画编排式开发任务
执行实例以可视化流程图形式完整呈现任务执行全流程,每个节点清晰展示输入参数与输出结果,并支持对指定节点进行手动重试或终止操作,便于问题定位与流程干预。
执行实例状态
辅助工具
数据回归验证
平台提供流批数据回归验证能力,支持模板化配置与一键复用,高效保障数据质量与业务稳定性。
- 批量回归: 多版本批数据快速比对,一键校验全量一致性,适用于版本迭代验证;
- 流式回归: 基于索引表增量变更抽样,对指定时间窗口内实时数据进行跨索引一致性校验,精准定位流式链路异常。
创建批数据回归任务
创建流数据回归任务
数据Debug
大禹平台构建了覆盖全链路的数据运维干预能力,确保数据处理的可靠性与灵活性。
- 组图配置: 支持对源端组图配置进行主动干预与调整,实现配置策略的快速生效。
- Dump流程: 支持Dump构建流程的调控,实现对全链路流程的问题快速定位,保障数据产出的稳定性与高效性。
- 在线索引: 提供线上索引数据的实时干预能力,支持对增量数据进行修正,确保索引内容的及时性与准确性。
四、业务场景实践
社区搜索倒排表链路
如下图所示,社区搜索倒排表 Dump 任务以动态内容为核心实体,融合动态实时内容流、天级统计特征及商品多维特征,通过流批一体处理生成高时效的倒排索引宽表。
社区搜索倒排宽表链路
穿搭精选推荐链路
如下图所示,穿搭精选推荐 Dump 任务以动态-商品关系为核心主表,融合动态维度的多源流批特征数据(如内容特征基础表、内容审核表、天级离线统计特征表等),利用DAG 编排构建动态-商品的大宽表。
穿搭精选推荐链路
五、未来规划
平台能力持续增强
- 算子体系完善: 基于业务场景持续增强关键算子(如维表动态更新、Service 服务化算子、UDTF 部署优化等)和优化调度流程,强化数据处理灵活性;
- 性能深度优化: 引入任务剪枝、智能倾斜治理等策略,提升资源利用率与执行效率;
- 可观测性升级: 构建覆盖全局大盘与任务粒度的监控体系,完善资源消耗追踪、Debug 与全链路 Trace 能力,夯实平台稳定性与运维支撑基础。
深化协同共建,释放平台价值
- 纵向提效: 聚焦索引构建效率攻坚,与索引平台深度协同重构数据同步链路。以社区搜索大宽表为例,当前同步耗时近3小时,通过消除冗余中间状态、精简处理流程,可以实现索引构建端到端提速,显著压缩数据准备周期。
- 横向赋能: 平台能力已在社区域多业务场景完成验证,后续可以联动其他业务场景共建;同时平台的子功能也具有通用能力,可将数据回归验证、索引监控大盘等高复用能力模块化开放,赋能各业务线“即插即用”,加速技术资产沉淀与跨域协同创新。
大禹未来规划
往期回顾
1.基于 Cursor Agent 的流水线 AI CR 实践|得物技术
2.从IDE到Terminal:适合后端宝宝体质的Claude Code工作流|得物技术
3.AI编程能力边界探索:基于 Claude Code 的 Spec Coding 项目实战|得物技术
4.搜索 C++ 引擎回归能力建设:从自测到工程化准出|得物技术
5.得物社区搜推公式融合调参框架-加乘树3.0实战
文 /野雨
关注得物技术,每周更新技术干货
要是觉得文章对你有帮助的话,欢迎评论转发点赞~
未经得物技术许可严禁转载,否则依法追究法律责任。