多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

数据中台重塑的不是Hadoop和Spark,而是数据全流程的协作方式

数据中台重塑的不是Hadoop和Spark,而是数据全流程的协作方式 做大数据这些年我见过太多团队把上数据中台理解成搭一套Hadoop集群、部署几个Spark任务、接上BI报表以为技术栈铺开中台就成了。结果往往是集群越建越大ETL脚本越来越乱业务方要的数依然对不上数据团队每天都在救火。后来我自己完整跟过两个数据中台建设项目才真正想明白一件事数据中台重塑的并不是Hadoop、Spark这些技术组件而是数据从生产到消费的整套业务流程。技术只是承载流程的容器真正的改造对象是需求怎么提、数据怎么加工、口径怎么统一、服务怎么交付、资产怎么沉淀这些环环相扣的协作方式。这篇文章我会用自己的实操经历把这个重塑拆开来讲传统流程断在哪里、中台用什么机制去接替它、落地时技术选型怎么取舍、以及实施过程中最容易踩的坑长什么样。不管你是数据团队的负责人还是正在学习大数据的学生只要在琢磨数据中台到底在重塑什么这个问题这篇文章应该能给你一个比较完整的答案。1. 先别急着建平台传统大数据流程的五个断点要理解数据中台在重塑什么首先得清楚被重塑的对象长什么样。我见过的绝大多数传统大数据团队业务流程是这样的业务方提出需求 → 数据开发接需求 → 写ETL抽数 → 加工成宽表/报表 → 交付给业务方。听起来顺理成章实际跑起来全是裂缝。1.1 烟囱式开发每个项目都在挖一口独立的井第一个断点是开发模式的烟囱化。我以前在一家零售公司CRM部门做一个会员分析项目供应链部门做一个库存预测项目两个项目组各自拉数据、各自建库、各自写清洗逻辑。同一个订单金额CRM那边从交易库直接取供应链那边从数仓的DWD层取两边处理方式还不一样。结果就是公司里同时存在着几十个小数据平台数据被重复加工了一遍又一遍每一遍都可能产生不同的偏差。这种模式在单项目阶段不觉得有问题因为每个项目交付的东西都能跑。但一旦项目数量超过人手承载的临界点维护成本就爆炸了。我曾经统计过一个数据团队维护的调度任务将近三百个其中有一半是不同项目对同一批原始数据的重复清洗。这不仅仅是计算资源的浪费更大的问题是——当上游源系统的字段发生变化时你要同时通知十几个项目组去改脚本漏掉一个这个口径就悄悄漂移了。1.2 口径不一致同一个指标十张报表十个数第二个断点是口径管理完全失控。这是传统大数据流程里最折磨人的问题。举一个我亲身经历的例子某次月度经营分析会上销售部门说本月GMV是1.2亿运营部门说1.35亿财务说1.1亿。三个数字都来自同一个源系统但因为取数时间、去重逻辑、退单处理方式不同结果差了一千多万。会上争论了一个多小时最后只能以再核对一下收场。口径不一致的根源不在开发人员不认真而在流程里缺少一个定义先行的环节。传统流程中业务方提需求时说的是我要看销售额开发人员就会自己去理解销售额的含义有人算含税有人算不含税有人含退款前有人含退款后。每个人都在自己的项目里做了一次定义而这些定义散落在代码里、注释里、甚至口头沟通里根本没有一个统一的地方去登记和约束它。数据中台要重塑业务流程首先就要打断这种各自定义、各自加工的链条。1.3 交付式思维做完报表流程就结束了第三个断点是交付即结束。传统流程里数据团队和业务方的关系很像外包甲方乙方业务方提出需求数据团队做一张报表交付验收通过流程闭环。但实际业务里指标的定义会变、源数据会变、分析维度会变所谓交付完成的报表没过多久就不符合需求了。业务方每次都要重新提需求、重新排队、重新开发周期长则两三个星期短则三五天。这种模式下数据团队永远在做重复劳动业务方永远在等数据双方都被困在需求-开发-交付的循环里。数据中台要改变的不是某一个环节而是把整个循环从项目制变成产品化——数据不再是一次性交付的报表而是可以持续复用、持续迭代的数据资产和服务。这个转变就是业务流程重塑的核心方向。1.4 数据与业务两张皮互相听不懂话第四个断点是语言不通。数据团队习惯聊表结构、字段、SQL逻辑业务团队习惯聊新客复购流失转化这些业务概念。传统流程里业务方把需求丢给数据团队中间隔着翻译的鸿沟。比如业务方说帮我看看高价值用户的特征数据开发得自己琢磨高价值怎么定义——是消费金额前10%还是RFM模型打分还是最近90天购买次数超过5次定义不同结果天差地别。这个问题不能靠开发人员多问几句去解决必须在流程中建立起一套业务术语 → 技术实现的标准映射机制。数据中台的指标字典、数据资产目录本质上就是干这件事的。没有这套机制再先进的技术平台也只是把听不懂话这件事加速了而已。1.5 可运维性差脚本跑挂了靠人工盯第五个断点是运维靠人肉。传统流程里每个项目组自己维护自己的调度任务失败不一定有告警告警了不一定有人响应响应了不一定容易排查。我曾经接手过一个团队他们的核心报表任务跑挂后依赖的下游任务会连环失败但报警邮件被淹没在几百封邮件里直到业务方打电话来问数据怎么没更新大家才发现早在昨晚就已经挂了。数据中台的落地某种程度上也是在流程里补上可观测性这一环——任务血缘、调度监控、数据质量校验这些都是要从流程和平台上一起设计的不是事后补救。2. 重塑的真正内核从交付一张表变成运营一组指标搞清楚了断点在哪再来看数据中台用什么机制去重塑。我自己的理解是数据中台本质上是对数据生产关系的调整它把项目制、烟囱式、交付型的协作模式变成平台化、服务化、资产化的运营模式。这个转变不是靠某一个工具实现的而是靠一套方法论加一套平台。2.1 OneData方法论统一命名、统一口径、统一模型先说方法论。我最早接触数据中台时被反复强调的一个词是OneData。它不是什么高深理论核心就三条统一命名规范、统一指标口径、统一模型分层。听起来很简单落地时却是整个重塑过程中最磨人的部分。统一命名规范指的是表名、字段名、指标名都有明确的命名规则比如事实表用dwd_开头汇总表用dws_开头应用表用ads_开头中间层用ods_承接源数据。命名里还要带上业务域、主题、粒度信息让人一眼能看懂这张表里有什么。统一指标口径是把所有业务指标的定义、算法、统计周期、去重规则、数据来源登记成册。比如会员复购率定义清楚是统计周期内购买2次及以上的会员数 / 购买会员总数分子分母分别取自哪张表、按什么时间粒度统计数据全部固化下来。以后不管谁来取这个指标都得按这个口径来。统一模型分层就是标准数仓那套ODS贴源层、DWD明细层、DWS汇总层、ADS应用层。每层职责清晰数据逐层加工避免业务方直接穿透到底层表乱取数。这套方法论的厉害之处在于它从流程上卡住了重复加工和口径漂移的源头。我见过一些团队不搞OneData直接上技术平台结果数据中台变成了一个更大的数据仓库烟囱依然在只是从项目级变成了平台级问题一点没解决。方法论先行是我反复跟人强调的一点。2.2 从提需求到查资产业务流程的重构有了OneData业务流程里最直观的变化发生在需求入口。传统流程里业务方有数据需求第一步是找人——找数据开发排队排上两三天。中台跑起来之后第一步变成查——查指标字典查数据资产目录看这个指标是不是已经存在看有没有现成的数据服务可以调用。我参与建设的一个中台项目里业务方提出需求后数据产品经理先在指标字典里检索如果指标已经定义过就直接走服务化接口交付不再进入数据开发流程。仅这一项改变就把30%以上的重复需求挡在了开发环节之外。这些需求不是不重要而是从一开始就不应该进入从零开发的流程。这时候你会发现数据团队的工作结构也变了不再是一堆需求接单员而是分化成指标定义者负责口径管理、数据开发者负责模型加工、服务提供者负责API封装各司其职。2.3 服务化数据从表变成可调用的能力中台重塑流程的第三个机制是数据服务化。传统模式下业务方消费数据的方式是你给我一张表然后自己拿去Excel里透视、处理。中台模式下数据被封成服务接口业务系统直接通过API调用指标实时返回结果。这样做的好处非常明显第一业务系统不再直接依赖底层物理表底层表结构怎么变只要服务接口契约不变业务方无感知第二权限控制可以精确到接口级别不再担心业务方连库直查拖垮集群第三数据可以被多个业务部门同时复用一份加工处处调用。我有个印象很深的案例某业务系统要展示今日实时销售额以前是数据团队每天凌晨跑批出T-1数据业务方只能看到昨天的数。中台建设过程中我们把核心指标接了实时链路接口调用毫秒级返回业务方体验的差异是巨大的——但背后流的重塑从T1批处理交付变成实时服务应答这已经完全是两套业务逻辑了。2.4 资产化运营数据越用越厚最后说一下资产化运营。数据中台强调数据是资产意思是说不光要用还要沉淀、评估、升值。每张表、每个指标、每个数据服务都有负责人、有登记信息、有调用次数、有质量评分的评估。业务上用不用它在资产平台上一目了然没人用的表会被标记为低热度提醒团队去做治理。这个机制反哺业务流程的效果是数据开发不再盲目堆表而是根据资产热度决定投入方向。我记得中台上线一个季度后资产盘点显示有大量冷表占了近40%的存储我们专门做了一轮下线既省了成本也让真正有价值的表权重更高。这就是资产运营对流程的持续优化不是一锤子买卖。3. 拿什么支撑重塑迁移方案、集群策略和数据开发链路的取舍方法论说清楚了就得落到技术选型上。数据中台建设绕不开三件事异构数据迁移、集群部署、数据开发链路的搭建。每一步的技术选型都直接影响流程重塑的成败我分别展开聊。3.1 异构系统整合迁移方案先想清楚再动手数据中台建设的第一步是把散落在各个业务系统的数据汇聚到平台上来。现实中几乎没有两家公司用的是完全一样的数据库组合Oracle、MySQL、SQL Server、PostgreSQL加上各种SaaS系统的API还有设备日志、App埋点数据全是异构的。数据迁移方案的选择是整个项目里最需要谨慎决策的环节。我的经验是先按数据的时效性需求分两类离线同步和实时同步。对于不需要秒级更新的数据比如财务流水、历史订单用离线批量同步就够了。工具选择上如果源是关系型数据库DataX和Sqoop都是常见的方案如果是日志类数据Flume是经典选择。这里有一个很容易踩的坑不要什么数据都用一套工具统一同步。DataX更擅长关系型数据库之间的数据同步Flume更擅长日志流采集你用Flume去同步MySQL全量数据不仅性能差维护也麻烦。按数据源类型选工具比强行统一工具链更重要。对于需要实时性的数据比如交易订单、用户行为就得走实时同步链路。目前比较成熟的方案是Canal监听MySQL的binlog把变更事件写入Kafka再由流处理引擎比如Spark Structured Streaming或者Flink消费到数据中台。这套链路的选型要特别评估两个点一是binlog的保留周期如果源库的binlog只保留24小时而中台消费链路发生故障超过一天数据就会丢失需要从离线补数恢复二是并发消费能力大促期间订单量暴涨消费积压怎么办Kafka分区数、消费者并发度都要提前规划。另外一个关键细节是数据迁移的校验机制。异构系统之间迁移最怕的是看似成功实则丢数。我给每个迁移任务都加了三个层面的校验源表和目标表的行数对比、主键去重对比、关键金额字段的汇总对比。只有三层全过才认为这个迁移任务真正完成。这个习惯看起来笨但救过我很多次——有一次就是因为源系统某个分表变更导致同步丢了两小时数据行数对比直接报警避免了业务方拿到的数据缺一块。3.2 集群部署策略存储计算分离是我现在的默认选择数据中台底层离不开大数据集群。集群部署策略这块早期很多团队选择一套Hadoop集群同时跑计算和存储也就是计算存储不分离。后来组件越来越多任务越来越重这种模式的瓶颈越来越明显跑一个重任务可能把CPU打满影响其他任务的调度扩容时计算和存储必须同步扩资源浪费很大。现在我自己更推荐的是存储与计算分离的架构。底层用对象存储或者分布式文件系统存数据上面跑计算集群两者独立扩缩容。这样做的直接收益是计算压力大的时候只扩计算节点存储紧张的时候只扩存储容量互不拖累。如果你是在云上建设这个优势尤其明显按需扩容的效率高很多。组件选型上调度和存储我建议用成熟稳定的方案HDFS或云上对象存储负责存储统一管理YARN或Kubernetes负责资源调度Spark负责批量计算Flink负责实时计算。这里要特别提一个很多新手容易忽略的点——资源队列规划。多个业务团队共用集群时如果不做队列划分一个团队的压测任务可能把整个集群的资源吃光其他团队的任务全部排队。比较稳的做法是按照业务线划分YARN队列并设置每个队列的资源上限和优先级核心链路任务的优先级高于探索性任务。这样即便某条业务线跑冒烟测试也不会影响核心报表产出。3.3 数据开发链路从同步到调度的完整闭环数据中台的日常开发链路大致是这样一个闭环数据源接入 → 数据同步 → 数据清洗加工 → 任务调度 → 数据服务或可视化应用。每一个环节都要有明确的工具和规范才算真正把流程重塑落到位。数据清洗加工这一步我强烈建议用可视化开发平台加代码开发结合的方式而不是让每个开发各自为战。直接用Spark SQL跑脚本当然可行但脚本散落在个人电脑上没有版本管理、没有血缘追踪、没有参数化配置出问题排查极其痛苦。现在主流数据中台产品普遍提供可视化任务编排能力调度依赖关系一目了然任务状态和血缘关系也能追踪这个投入是值得的。任务调度是全链路最不能马虎的环节。我见过最多的故障都出在调度上依赖关系配错、重跑逻辑混乱、任务并发冲突。一个稳妥的安排是核心任务全链路设置依赖上游任务成功才触发下游启动每类任务配置独立的重跑策略比如日批任务跑失败了允许手动重跑但要带运行版本号以便排查实时任务则要配置断点续跑机制避免Streaming任务因反压或异常退出后从零开始消费。数据服务层可以用统一的API网关封装指标查询接口。我比较推荐的做法是底层算好的DWS汇总表通过服务层暴露查询接口而不是把宽表直接给业务方。查询接口做好缓存策略高频查询直接走缓存避免每次请求都压到集群上低频查询走实时计算保证数据新鲜度。这样既控制了集群负载又保证了业务方的响应体验。4. 重塑落地最容易走偏的三个场景与我的排错过程方法和技术都摆好了不代表项目能顺风顺水。数据中台建设的流程重塑真正的大坑往往不在技术上而在人和组织以及看不见的数据质量问题上。这一章我挑三个我实际踩过的场景来讲每个场景都附上完整的排查和调整过程供你参考。4.1 场景一指标口径统一了业务还是不认账我们第一个中台项目上线后第一次汇报我把苦心整理的指标字典拿出来几百个指标定义得清清楚楚觉得已经大功告成。结果业务部门的负责人扫了一眼就说这个指标字典是你们技术人员的理解不是我们业务的定义你说的有效订单跟我们的有效订单不一样。这个问题让我意识到指标口径的统一光靠数据团队自嗨是不够的要在流程上让业务参与定义。我们后来改了做法成立了一个指标评审小组每个业务域的核心指标都拉上对应的业务负责人和数据产品经理一起评审确认。一个指标一个指标过讨论清楚统计的是谁、用什么周期、包含什么状态之后再由数据团队固化到字典里。这个流程虽然慢每个指标可能来回拉锯两三次但一旦确认后续几乎不再反复。排错之后我还总结了一个关键点指标字典必须区分指标名称和技术实现字段因为同一个业务概念在不同系统里叫法不一样。比如业务方说客户CRM系统里叫customer_id交易系统里叫buyer_id如果不提前做好映射关系就算指标字典写好了开发取数时还是会各取各的。4.2 场景二数据质量检查不到位一次静默故障差点酿成大错中台上线三个月后某天业务方反馈某个核心报表的转化率突然从5%掉到3.8%但整个调度链路前一天显示全部成功。我排查的第一步是看源系统数据有没有异常发现某活动渠道的埋点日志从某个时段起大幅减少。进一步追查发现这个渠道的埋点SDK因为版本升级新日志格式跟旧版不一致导致采集解析时大量数据被过滤掉。而我们的同步任务没有报错数据质量检查也没有覆盖到这个字段的空值率变化。这次事故之后我彻底调整了数据质量检查的框架。除了基础的行数对比还增加了三类校验空值率波动检查——某个字段空值率如果环比变化超过阈值立即告警主键唯一性检查——维度表的业务主键绝对不能出现重复业务波动检查——核心指标比如转化率、销售额日环比偏差超过20%就触发预警。这些检查全部做成自动化任务挂在调度链路的末尾每天跑批完成后自动执行有异常就发企业微信告警而不是等业务方发现。这里有个经验想特别分享数据质量检查不是上线后补的而是在开发阶段就要内建。每个清洗任务写完就应该顺手定义它的质量校验规则否则数据越攒越多返工成本越高。质量检查框架的职责不是发现一次错误而是让每次错误都能第一时间暴露在监控台上。4.3 场景三组织阵型没跟上中台成了数据团队的独角戏第三个场景比较隐蔽但也是最致命的。我们平台、方法论都上了业务方却用得很少指标服务调用量怎么也上不去。为什么因为业务流程重塑必然会改变双方的工作习惯以前业务方可以随时找某个开发帮我跑个数现在要通过资产平台和服务规范走以前开发人员是我接口谁来都行现在要按平台规范建模不能随心所欲。说白了旧流程被打破新流程还没有建立信任。我的调整思路是先搞种子项目不要全面铺开。选两三个业务痛点最强的场景比如经营分析、实时大屏从需求定义到数据加工到服务输出全程走新流程做出标杆给全公司看。标杆出来业务方看到不用排队也能拿数口径终于对得上了自然会跟着用。同时组织层面也要配一个数据产品经理的角色专门负责业务和数据团队的桥接确保业务需求翻译成技术口径的过程中不出偏差。另外一个调整是中台团队和业务方向之间的考核要打通。以前业务方提了需求如果中台不满足会互相指责后来我们把指标服务的调用量、业务方满意度纳入中台团队的考核把口径统一度纳入业务侧配合的考核两边利益绑在一起协作才顺畅起来。数据中台的重塑从来不单纯是技术流程的重塑组织结构和工作流程必须同步调整。5. 最后说点实在话不同规模团队的打法不应该一样如果读到这里你已经理解了数据中台重塑的机制也想在自己的团队或实习项目里去验证我给你两条实在建议。数据中台的建设不是一开始就要建一个完整平台而是从流程上补最痛的那些洞。中小团队先把指标字典和命名规范做起来用开源组件搭一条轻量链路比买一套商业中台更靠谱大团队重点把钱和精力花在数据服务化和资产运营上因为只有规模大到一定程度流程标准化的收益才能盖过流程改造的成本。我经手过的项目里凡是为了中台而中台的基本都失败了凡是从业务痛点出发反推流程改造的即使技术栈朴素一些最终也都做成了。技术选型永远是为流程重塑服务的别本末倒置。最后再分享一个我自己保留到现在的工作习惯每做一个数据任务我都会顺手写一段这个任务到底服务谁、解决什么决策问题的注释放在脚本头部。这个习惯最初是某位老前辈要求我的说数据开发不能只盯着表结构得盯着业务流程。多年下来这句注释帮我挡掉了大量无意义的需求也让我在排查数据问题时永远知道业务方真正想回答的问题是什么。数据中台重塑业务流程说到底也不过是这句话的工程化版本。
返回列表