很多人第一次接触数据集成,会把它理解成一句话:把一个系统的数据搬到另一个系统。 ERP订单同步到数仓,CRM客户数据进入数据平台,Excel导入数据库,再把第三方平台的数据通过接口拉回来,看起来似乎都是“搬数据”。
但真正做过企业数据项目就会发现,把数据搬过去往往只是最容易的一步。 真正困难的是:ERP每10分钟产生一次新订单,怎么只拿变化的数据?接口一天只能调用一定次数,几十万条记录怎么完整拉下来?供应商每天发来的Excel字段突然变了怎么办?实时订单通过Kafka进入平台以后,如果重复消费,会不会导致销售额算两遍?
所以,数据集成真正集成的并不只是数据。它实际上是在统一不同系统之间的连接方式、数据结构、变化机制、传输节奏和异常处理规则。

一、数据集成真正解决的,是“数据怎样持续流动”
假设一家制造企业同时存在ERP、CRM、WMS、MES、财务系统和电商平台。客户在CRM里,下单发生在ERP,库存放在WMS,生产进度来自MES,回款又记录在财务系统。
管理层想知道一个很普通的问题:“这个客户下单以后,为什么一直没有发货?” 真正回答这个问题时,需要把客户、订单、库存、生产、采购甚至物流数据串在一起。
因此,数据集成至少要解决四层问题。第一层是连接。 数据究竟存在哪里,通过数据库、API、文件还是消息队列获取。第二层是变化。 源系统发生变化以后,下游怎样知道哪些数据是新增、哪些被修改、哪些已经删除。第三层是转换。 即使两边都有“客户”字段,也可能一个使用客户编码,一个使用统一社会信用代码;日期格式、状态代码、组织编码也可能完全不同。

第四层是运行。 同步任务如果凌晨2点失败,是第二天人工重新跑,还是能够从上次断点继续?重复执行以后会不会产生两份数据?所以真正的数据集成链路更接近:连接数据源 → 识别变化 → 清洗转换 → 写入目标端 → 调度运行 → 异常恢复。
实际项目做到后面,最容易失控的往往不是某一条SQL,而是企业同时维护几十甚至几百条同步链路:ERP每天同步一次,订单每10分钟一次,库存实时同步,CRM每天凌晨更新客户主数据。
这类任务如果分别散落在脚本、数据库存储过程和个人电脑上,一旦人员调整或者系统变更,很难判断哪条链路依赖哪张表。这也是数据集成平台真正承担的角色:不是单纯“搬数据”,而是管理数据怎样长期流动。

二、数据库集成:真正难的是“只同步发生变化的数据”
数据库是企业最常见的数据来源。ERP、CRM、财务、供应链等系统背后,通常都存在MySQL、Oracle、SQL Server、PostgreSQL等关系型数据库。
最粗暴的数据集成方式是:每天把整张表重新读取一遍。如果订单表只有10万条,这种方式可能暂时还能运行。但如果订单表已经有3亿条,而企业希望每10分钟同步一次,再反复扫描3亿行显然不可行。于是数据库集成真正的核心问题出现了:增量。 最常见的方法,是利用更新时间:暂时无法在飞书文档外展示此内容。
例如昨天同步到23:59:59,今天只读取之后更新的数据。但这个方法并没有想象中稳。如果某条数据更新发生在23:59:58,却因为事务延迟直到00:00以后才提交,就可能被漏掉;如果服务器时间不一致,也可能出现重复或者遗漏。

因此成熟的数据集成不会只考虑“查询条件怎么写”,还要考虑:增量游标如何保存、任务失败以后从哪里恢复、迟到数据怎样处理、重复数据如何保证幂等。
再往前一步,就是CDC,也就是Change Data Capture,变化数据捕获。它不再频繁询问:“表里有没有新数据?”而是读取数据库产生的变更日志:新增了一条订单;订单状态从“待支付”变成“已支付”;库存从100变成98。
这种方式捕获的是变化本身。所以数据库集成真正存在两种思路:批量抽取关注“现在表里有什么”; CDC关注“刚刚发生了什么变化”。
前者适合低频批处理,后者更适合高频、实时或准实时同步。这也是为什么企业不能只问“能不能连数据库”,更应该问:这套链路准备怎样长期获取增量数据?

三、API集成:你集成的不是数据表,而是系统的“对外契约”
并不是所有系统都会把数据库开放出来。尤其是SaaS系统、外部物流平台、电商平台和第三方服务,通常只提供API。
例如:暂时无法在飞书文档外展示此内容系统返回订单列表。表面看只是一次HTTP请求,实际上API集成和数据库集成存在一个本质区别:数据库连接以后,你面对的是数据结构; API连接以后,你面对的是对方定义好的业务契约。
对方决定你能查什么、一次查多少、多久允许调用一次。因此API集成通常要处理:身份认证、Token刷新、分页、限流、超时、重试、错误码以及JSON解析。假设接口一次最多返回1000条订单,而企业当天有30万条数据。
那么同步链路至少要知道:第1页读取成功了吗?当前读到第几页?第127页超时以后,是全部重跑还是从第127页继续?重复请求会不会重复写入?下一页的游标放在哪里?这时,API集成实际上已经变成一个带状态的数据获取过程。

还有一个经常被忽视的问题叫做接口契约变化。今天返回:暂时无法在飞书文档外展示此内容。明天接口升级后改成:暂时无法在飞书文档外展示此内容或者原来金额是数字,后来变成字符串。接口本身可能仍然返回200,但下游数据任务已经无法正常解析。
所以API集成不能只监控“接口通不通”,还要监控:返回结构有没有变化,数据量是否异常,关键字段是否缺失。 一些项目里,订单从数据库同步、物流轨迹从第三方API获取、结果再统一进入数仓。如果全部单独写脚本,后续会形成大量分散的连接程序。
放到数据开发任务里时,API读取以后可以继续接数据解析、字段转换、关联加工和数据库写入。这样真正维护的是一整条“获取—处理—落库”链路,而不是只留下一个接口调用脚本。

四、文件集成:最容易低估的,其实是“数据交付协议”
很多人会觉得:企业都做数字化了,怎么还在传Excel、CSV?实际上文件仍然是非常常见的数据交换方式。
银行对账单、供应商数据、集团下属企业报表、第三方结算数据以及历史系统迁移,经常依赖CSV、Excel、TXT等文件。因为文件有一个很现实的优势:双方不需要拥有能够直接互联的系统。

例如供应商约定:每天22:00以前,把当天销售明细上传到SFTP目录。看起来只是“读取CSV”。但实际运行以后会出现大量问题:昨天20列,今天突然21列;金额原来是数字,今天有人填了“—”;文件应该22:00到,结果23:30才上传;昨天的文件重新上传一次;文件上传过程中就被下游任务读取。
因此文件集成真正集成的并不是CSV本身,而是一套数据交付协议:什么时候交付;放在哪个目录;文件怎样命名;每个字段代表什么;重复文件怎样识别;异常文件怎样隔离;处理完成后怎样归档。也就是说:文件只是载体,规范才是真正的接口。

数据库主要解决系统内部结构化数据流动,API解决系统之间受控访问,而文件往往解决的是弱连接情况下的批量数据交换。
五、消息队列:从“同步数据”变成“传播业务事件”
前三种方式大多数时候仍然属于一种思路:下游主动去拿数据。 消息队列则反过来。订单创建以后,上游不需要等待别人查询,而是直接发布一个事件:暂时无法在飞书文档外展示此内容
支付成功,再发布:暂时无法在飞书文档外展示此内容库存发生变化:暂时无法在飞书文档外展示此内容
Kafka、Pulsar等消息系统,解决的就是这种持续发生的事件流。因此消息队列特别适合:实时订单、设备IoT数据、物流轨迹、支付事件、库存变化、实时风控等场景。
但很多人会误以为:用了Kafka,就等于实现了实时数据集成。真正上线以后,麻烦才刚刚开始。最典型的问题是重复消费。假设系统收到:“订单A支付100元。”消费者已经把100元写进实时销售表,但在提交消费位置之前突然宕机。系统恢复以后,这条消息可能再次被读取。
如果处理逻辑只是:暂时无法在飞书文档外展示此内容那么同一笔订单就会被计算两次。因此实时数据集成真正关心的是:事件是否丢失、是否重复、顺序是否正确、失败以后能否重新消费。
这也是at-most-once、at-least-once以及exactly-once这些概念背后的真实业务问题。企业同时存在离线和实时链路以后,这种复杂度还会继续增加。例如订单明细每天通过数据库批量同步,而支付事件和库存变化通过Kafka进入实时链路。
实际维护时,两类任务往往会放在同一个数据集成体系中:一边维护周期性的批处理任务,一边承接CDC或消息数据,再分别进入明细层、实时指标层或者下游业务系统。

这里真正需要解决的不是“实时是不是比离线高级”,而是:不同数据应该按照自己的变化速度进入对应链路。 每天变化一次的数据,没有必要秒级同步;库存预警如果第二天才更新,又失去了业务意义。
六、数据库、API、文件、消息队列,到底应该怎么选?
真正成熟的数据架构,不会要求所有系统统一使用一种接入方式。因为四种方式解决的问题完全不同。数据库,适合大量、结构化、企业内部可直接访问的数据。 核心问题是增量、CDC和同步性能。API,适合系统边界明确或者数据库不能直接开放的场景。 核心问题是认证、分页、限流和接口契约。文件,适合低频、批量以及组织之间弱耦合的数据交换。 核心问题是交付规范和异常文件管理。消息队列,适合连续发生且时效要求高的业务事件。 核心问题是顺序、重复、消费进度和恢复能力。

所以真正做数据集成选型时,不应该先问:“用数据库还是API?” 而应该先问四个问题。数据由谁控制? 如果是企业内部核心数据库,可以考虑直接同步;如果属于外部SaaS,通常只能走API。数据量有多大? 每天几亿条交易记录和每天几百条供应商数据,显然不应该采用同样的方案。数据多久变化一次? 客户主数据可能每天更新一次,订单每分钟变化,设备数据则可能每秒产生数千条。业务多久必须看到变化?这最终决定链路应该是T+1、小时级、分钟级还是实时。
因此同一个企业里完全可能同时存在:ERP历史订单通过数据库批量初始化;新增订单通过CDC持续同步;第三方物流通过API获取;供应商结算通过Excel交付;库存变化通过Kafka实时进入平台。这不是架构混乱,而是不同数据按照不同特征选择了不同的流动方式。

结语
理解数据集成,最容易犯的错误,就是把它看成:A系统 → B系统。 真正的数据集成其实应该继续向下追问:数据怎样产生?变化怎样被发现?多久同步一次?失败以后怎样恢复?字段变化以后谁来处理?下游怎样知道拿到的数据完整可信?
所以数据库、API、文件、消息队列虽然看起来是四种技术,背后解决的其实是同一个问题:让不同系统中的数据,以确定的规则、确定的节奏和可追踪的方式持续流动。
真正成熟的数据集成体系,也不应该只看:“我们已经接入了多少套系统。”更值得关注的是:增量有没有漏,失败能不能补,重复数据能不能识别,上游变化能不能发现,整条链路能不能追踪。
当企业开始管理这些问题时,数据集成才不再是一次性的接口开发。而真正成为了企业数据平台中长期运行的数据供应链。