首页/数据/数据工程与 ETL 速查/数据采集的四类模式
管道基础52 条

数据采集的四类模式

按来源划分:数据库(批量抽取或 CDC)、日志(Agent 采集)、API(定时拉取)、文件(批量投递)。不同来源的可靠性、重复与顺序特性差异明显。

采集的四类来源

按数据来源划分,采集方式基本落在四类上:数据库用批量查询或日志级 CDC;应用日志用采集 Agent 收集后送消息队列;第三方接口定时拉取;文件由上游按批次投递到 FTP 或对象存储。四类来源的可靠性、重复性与顺序特性各不相同,落地方式也应区别对待。

统一假设:一定会重复

所有采集通道都要按「会重复投递」来设计:日志采集器在轮转或重启后可能重读末尾部分内容,接口重试可能重复写入,CDC 位点回退会重放事件。把去重放在下游是最可控的方案——要求上游不重复,成本高且无法验证。

基本信息

数据库批量查询或 binlog 日志级 CDC
应用日志Agent 采集后送消息队列,注意轮转与断点续传
第三方接口定时拉取加游标分页,注意限流与重试
文件投递SFTP 或对象存储按批次落地,注意完成标记
共同要求可断点续传、可幂等重跑、有采集水位与监控

来源类型

来源采集方式常见工具注意点
数据库批量查询或 binlog CDCDataX、Debezium、Flink CDC对源库压力与增量边界
应用日志Agent 采集后送消息队列Filebeat、Fluent Bit、Vector日志轮转、断点续传、多行日志
第三方 API定时拉取加游标分页脚本加调度、Airbyte限流、重试、幂等与配额
文件投递SFTP 或对象存储批次落地调度监听、对象存储事件通知完成标记、重复处理、归档

典型使用场景

  • 业务库入仓:小表走全量、大表走增量或 CDC
  • 应用日志入湖:Agent 采集到消息队列,再由流任务落湖
  • 第三方对账数据拉取:定时任务按游标分页拉取并记录水位
  • 上游批量丢文件:以「文件到达」为触发条件,处理完立即归档
  • 多源合并:不同来源用各自的采集器,统一落到同一张贴源表

采集方式速记

采集方式速记
库:小表全量 + 大表增量(更新时间或 CDC);增量水位存控制表
日志:append-only,重发风险高,下游必须能去重;注意多行异常栈的合并
API:外部依赖不可控,要有重试上限、限流退避与失败告警
文件:以批次为单位,先写完成标记再处理,处理完归档避免重复
采集端要留下可核对的水位:记录每次抽取的时间范围与条数,是判断「上游没数据」还是「采集失败」的唯一依据,也是补数时的起点。
文件投递场景中,若处理程序只扫当前目录而不移动已处理文件,上游补投同名文件时会重复入库;处理完成后立刻归档或写完成标记。

易错点

  • 日志采集端文件轮转后未跟踪新文件(inode 变化),静默丢数且监控上没有任何异常
  • API 拉取不记录水位,失败重跑要么重复拉取要么跳过区间,两种结果都需要人工核对
  • 文件到达即处理、不做完成标记,遇到上游正在写入的半截文件,解析报错或写入残缺数据
  • 假设上游不重复投递而不做下游去重,出现重复时只能整批重刷,成本远高于事先做幂等

数据来源与参考

  • Apache Flink 官方文档:Data Pipelines 与 Connector 章节
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌