数据采集(Data Ingestion) 是整个数据流水线的关键起点。一个稳健的采集方案直接影响后续数据的质量、时效性和可用性。以下是系统性的数据采集方案设计,涵盖核心原则、采集类型、技术选型及实施要点。


一、数据采集的核心目标

  1. 全量覆盖:确保关键数据源无遗漏。

  2. 高效稳定:支持高吞吐、低延迟、容错恢复。

  3. 可扩展:适应业务增长与数据源变化。

  4. 低成本:平衡计算、存储与开发成本。


二、数据源分类与采集策略

1. 业务数据库(OLTP)

  • 场景:MySQL、PostgreSQL、Oracle等。

  • 采集方式

    • 全量同步:首次或定期全表抽取,适合小表或初始化。

    • 增量同步

      • 基于时间戳:基于update_time字段获取增量数据,操作简单但对数据库压力较大。

      • 基于增量标识:数据库日志(如MySQL的binlog)使用CDC工具(Debezium、Canal)同步数据,架构复杂但是对数据库的压力较小。

2. 日志数据

  • 场景:用户行为日志、应用日志、服务器日志。

  • 数据生成:前端/后端埋点上报至日志服务器、应用或者服务器记录的运行日志

  • 采集方式

    • Agent采集:Flume、Filebeat、Logstash采集到消息队列(Kafka)。

3. 消息队列

  • 场景:Kafka、RocketMQ、Pulsar中的实时数据。

  • 采集方式:直接消费(如Kafka Connect、Flink),写入数仓ODS层或者数据湖。

4. 文件数据

  • 场景:CSV、JSON、Parquet等文件(本地或云存储)。

  • 采集方式:定期扫描 + 增量拉取(如AWS S3 Sync、SFTP同步)。

5. API数据

  • 场景:第三方服务数据(如广告平台、社交媒体)。

  • 采集方式:定时调用API + 异常重试(定时任务或自定义脚本)。

6. 物联网/传感器数据

  • 场景:设备实时流。

  • 采集方式:MQTT接入 → 流处理平台(如Flink)→ 数仓。


三、数据采集架构

1. 批处理采集(Batch Ingestion)

  • 适用场景:对时效性要求不高(T+1)、数据量大。

  • 技术工具

    • Sqoop:关系型数据库 ↔ Hadoop生态。

    • DataX:阿里开源的多源异构同步工具。

    • DolphinScheduler / Airflow + 自定义脚本:调度复杂依赖任务。

  • 使用场景:

    • 分区存储,按天/小时分区。

2. 流式采集(Streaming Ingestion)- Kappa架构

  • 适用场景:实时数仓、实时监控、事件驱动分析。

  • 技术工具

    • Kafka Connect:连接外部系统到Kafka。

    • Flink CDC:直接读取数据库日志或者消息队列并写入数仓。

    • Debezium / Canal:CDC工具,将数据库变更流式输出。

    • flume: 日志文件实时采集到消息队列。

  • 使用场景:

    • 设置合理的Checkpoint和窗口。

    • 考虑乱序处理和延迟数据。

3. Lambda架构(批流混合)

  • 批处理保障数据完整性,流处理保障低延迟。

  • 如:Kafka实时接入和 T+1批处理同时采集。


四、技术选型参考

数据类型

推荐工具

特点

关系型数据库

Debezium + Kafka, DataX, Sqoop

支持CDC,数据一致性高

日志文件

Filebeat/Flume + Kafka

轻量级,适合日志聚合

云存储文件

AWS Glue, Azure Data Factory

托管服务,易集成

API数据

DolphinScheduler / Airflow + Python SDK

灵活调度,易于异常处理

实时流

Kafka Connect, Flink CDC

低延迟,高吞吐


五、数据采集关键步骤

1. 需求分析与源评估

  • 确定数据范围、更新频率、数据量、 SLA。

  • 评估源系统性能影响(如是否可开放Binlog)。

2. 选择同步模式

  • 全量快照:简单粗暴,适合小数据量。

  • 增量追加:高效,但需处理更新。

  • CDC事件流:最精确,技术复杂。

3. 设计数据通道

  • 通道协议:JDBC、Kafka、HTTP、SFTP等。

  • 序列化格式:Avro(Schema演进)、JSON、Parquet。

4. 实施与监控

  • 数据质量检查:非空、唯一性、值域验证。

  • 监控指标:延迟、吞吐量、错误率、数据积压。

  • 告警机制:任务失败、延迟超阈值。


六、典型架构示例

数据源 →           采集层 →        缓冲层 →    存储层
(DB/日志/API) → (CDC/Agent) → (Kafka) → (ODS层S3/HDFS)
  • 采集层:Debezium捕获MySQL变更 → Kafka。

  • 缓冲层:Kafka解耦生产消费速率。

  • 存储层:Spark/Flink写入数仓ODS(Parquet格式)。


七、注意事项

  1. 数据一致性:分布式环境下确保精确一次(Exactly-once)或至少一次(At-least-once)语义。

  2. Schema演进:使用Avro或Schema Registry兼容变更。

  3. 安全与合规:敏感数据脱敏、加密传输、访问控制。

  4. 资源隔离:避免采集任务影响线上业务。

  5. 成本控制:合理选择云服务或自建方案。


八、未来演进

  • 趋势:实时化、自动化(数据发现与采集)、云原生托管服务。

  • 技术:Flink CDC逐步替代传统ETL。