数据流水线架构——从数据源到洞察
数据流水线架构,在一张交互式画布上讲清楚:源系统、变更数据捕获、采集、流处理与批处理、数据仓库,以及让回路闭合的数据消费。
数据流水线把数据从产生它的系统搬到使用它的地方:数据源喂给采集层,处理层做转换,存储层把它留住,看板和模型再把它变成决策。
数据流水线架构——从数据源到洞察
The interactive FlowJam canvas for this explanation — every lane, row and arrow above is a real QueryChart diagram you can open and edit.
How to read this visual
- 把收集这一列从上往下读:数据源产生数据,采集把它搬走,队列给它做缓冲。
- 转换这一列分成流处理和批处理——两条路径,在存储里汇到同一个终点。
- 把供给这一列当作回报来读:存储同时喂给分析和机器学习,而两者又都喂回业务。
收集数据
“源系统——应用、数据库、日志、API”点出了每一个数据生产者,“变更数据捕获追踪新数据”则是一条现代流水线跟得上节奏的办法——盯着源数据库,把每一次变更都作为事件发出来,于是流水线是被持续喂养的。“消息队列为数据流做缓冲”是减震器:如果下游处理变慢,数据会排队等待,而不是被丢掉。
转换数据
处理这条泳道按速度分岔:“流处理器实时做转换”在事件到达时就处理它们,服务于低延迟的用法;而“批处理作业按计划周期做转换”承担沉重的历史数据关联和聚合,它更便宜,也更容易排查问题。两条路都汇进“数据仓库存放清洗并关联好的数据”——那份对一切的、单一而可查询的一致视图。
供给与闭合回路
“分析看板查询数据仓库”和“机器学习模型在这些数据上训练”是存下来的数据被消费的两种方式,而“洞察回流到业务中”是那条返回的回路——洞察改变一个决策,决策改变产品,产品又产生新的数据。正因为有这条回路,结尾才被画成一次返回,而不是一个终点:一条没有回路的流水线是成本,不是资产。
Key relationships and takeaways
- 五条泳道就是流水线的解剖结构:数据源、采集、处理、存储、消费。
- 流处理和批处理是同一条流水线上的两条路径,按延迟和成本来选。
- 变更数据捕获让采集变成持续的,于是数据仓库跟住的是数据源,而不是每晚一次的全量导出。
- 数据仓库是每一个消费方都要读的那份单一的一致视图。
- 流水线的价值在于回到业务的那条回路——洞察必须改变决策。
When to use this visual
- 在团队选型之前,先讲清楚一条数据流水线有哪些层,好让工具对得上角色。
- 设计一条新流水线:这张画布指出了在哪里做流处理与批处理的取舍、在哪里做存储的取舍。
- 审视一条已有的流水线——少了一个队列,或者没有变更数据捕获,都是这张图会一眼摆明的缺环。
运作方式
写出你真实的数据源
用你实际的系统替换掉这些通用数据源——你的交易数据库、你的事件分析、你的 SaaS 导出——每个数据源一个方框。
选定你的处理路径
在流处理和批处理两个方框上标注你各自真正在用的工具,并注明哪些事件走哪条路。
画出数据仓库的模式
在存储方框上注明你的数据仓库和关键表,让这张图显示出清洗后的视图里到底有什么。
画上质量与监控关卡
在处理与存储之间加上数据质量校验,并给整条流水线加一个监控方框,每一项都以一个明确的告警或隔离状态收尾。
常见问题
什么是数据流水线?
数据流水线是把数据从产生它的地方搬到使用它的地方的那套系统,途经采集、处理、存储和消费几个阶段。它的任务是把数据收集起来,让它变得一致、可查询,再把它供给使用它的看板、报表和模型——持续地供给,而不是靠脆弱的人工导出。
流处理和批处理有什么区别?
流处理在事件到达时就做转换,能给出秒级或分钟级的低延迟,代价是系统更复杂、更贵。批处理对累积下来的数据跑定时作业,结果要等上几个小时,但成本更低,也更容易排查问题。真实的流水线两者都跑:对时间敏感的数据走流处理,沉重的历史工作走批处理。
什么是变更数据捕获?
变更数据捕获(CDC)盯着一个源数据库,为每一次插入、更新或删除发出一个事件,于是下游系统几乎在变更发生的同时就知道了。它用一条持续的变更流取代了每晚一次的全量导出,这正是数据仓库能近乎实时地跟住数据源、而不是一天只跟一次的原因。
数据流水线为什么需要消息队列?
因为生产者和消费者跑的速度不一样。队列把两者解耦:生产者发出一个事件就继续往前走;而如果下游处理慢了下来,事件就在队列里等着,既不会被丢掉,也不会把生产者堵住。正是这种缓冲让流水线扛得住突发流量和变慢的环节,这也是图里把队列摆在采集紧后面的原因。
在 QueryChart(FlowJam)中编辑这张图解
把上面这张数据流水线画布原样打开成你自己的图表,把各阶段改成你自己的技术栈,再把你的数据流画上去。