彩虹朋友拳击乱斗
68.23M · 2026-03-22
大禹平台是一个离线 Dump 平台。在不同的场景都有自己的 Dump 流程,我们这里的 Dump 特指在搜索、推荐、广告(后续简称 “搜推广”)的场景中,将异构数据源加工处理后给到索引平台做索引的流程。
Dump 流程有如下一些特点:
离线 Dump 流程
当前 dump 开发模式
如上图是当前常见的 Dump 开发模式,采用了流批分离架构:流处理通过 DTS 订阅 binlog,由 Flink 消费主表变更事件并反查关联表构建宽表,实现增量更新;批处理则将 MySQL 数据抽取至 ODPS,通过 Spark 处理多源数据并按业务逻辑拼接,最终输出 ODPS 表。这种架构存在以下问题:
当前 dump 开发的问题
依托社区搜索核心场景,构建流批一体化的新质 Dump 架构,实现以下三大核心能力突破:
平台架构
如上图是大禹平台技术架构,底层依赖公司的 DJob Cron 定时任务、Flink/Spark 流批计算能力以及多种存储系统;上层为平台支持的搜推广多种场景业务。
大禹平台分为管理平台与后台系统两部分。管理平台完成处理逻辑的 DAG 开发和相关 Debug、回归验证、监控大盘等能力;后台系统将管理平台的配置转为执行任务,然后依托流批框架生成 Flink/Spark 执行实例,通过调度引擎完成全流程任务执行。
如下图是新版 Dump 流程,将 Dump 拆分为三个阶段:镜像阶段、宽表阶段、导出阶段,以及流、批两种处理模式。新版流程处理过程有如下优化:
新版 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);
}
}
大禹支持任务实例按照大全量和小全量两种模式运行,针对部分频繁更新部分字段需求的任务可实现快速加载。
小全量模式
大禹平台支持任务产出的双重应用:既可对接计算引擎(如 CEngine),亦可作为公共数据被下游任务高效复用。平台通过标准化的 MirrorOut(导出)与 MirrorIn(接入)算子构建清晰的数据复用链路 —— 上游任务将公共数据配置为 MirrorOut 导出,下游任务通过 MirrorIn 算子一键引用,无需重复开发与数据搬运,实现数据资产的即产即用、任务依赖的显式管理,显著提升开发效率与数据复用性。
任务复用
管理平台提供一站式任务开发生命周期管理,涵盖任务创建、可视化流程编排、实例调度与资源管控等核心环节;其中,Dump 任务通过可视化编排实现业务配置——用户仅需拖拽算子节点、配置参数,即可直观构建数据处理逻辑,显著提升开发效率与配置准确性。
如下图,通过拖拽算子的方式,可以直观地构建 dump 任务的流程图,实现便捷高效的开发体验。
图画编排式开发任务
执行实例以可视化流程图形式完整呈现任务执行全流程,每个节点清晰展示输入参数与输出结果,并支持对指定节点进行手动重试或终止操作,便于问题定位与流程干预。
执行实例状态
数据回归验证
平台提供流批数据回归验证能力,支持模板化配置与一键复用,高效保障数据质量与业务稳定性。
创建批数据回归任务
创建流数据回归任务
大禹平台构建了覆盖全链路的数据运维干预能力,确保数据处理的可靠性与灵活性。
如下图所示,社区搜索倒排表 Dump 任务以动态内容为核心实体,融合动态实时内容流、天级统计特征及商品多维特征,通过流批一体处理生成高时效的倒排索引宽表。
社区搜索倒排宽表链路
如下图所示,穿搭精选推荐 Dump 任务以动态-商品关系为核心主表,融合动态维度的多源流批特征数据(如内容特征基础表、内容审核表、天级离线统计特征表等),利用DAG 编排构建动态-商品的大宽表。
穿搭精选推荐链路
平台能力持续增强
深化协同共建,释放平台价值
大禹未来规划
1.基于 Cursor Agent 的流水线 AI CR 实践|得物技术
2.从IDE到Terminal:适合后端宝宝体质的Claude Code工作流|得物技术
3.AI编程能力边界探索:基于 Claude Code 的 Spec Coding 项目实战|得物技术
4.搜索 C++ 引擎回归能力建设:从自测到工程化准出|得物技术
5.得物社区搜推公式融合调参框架-加乘树3.0实战
关注得物技术,每周更新技术干货
要是觉得文章对你有帮助的话,欢迎评论转发点赞~
未经得物技术许可严禁转载,否则依法追究法律责任。