数据采集(Data Ingestion) 是整个数据流水线的关键起点。一个稳健的采集方案直接影响后续数据的质量、时效性和可用性。以下是系统性的数据采集方案设计,涵盖核心原则、采集类型、技术选型及实施要点。
一、数据采集的核心目标
全量覆盖:确保关键数据源无遗漏。
高效稳定:支持高吞吐、低延迟、容错恢复。
可扩展:适应业务增长与数据源变化。
低成本:平衡计算、存储与开发成本。
二、数据源分类与采集策略
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批处理同时采集。
四、技术选型参考
五、数据采集关键步骤
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格式)。
七、注意事项
数据一致性:分布式环境下确保精确一次(Exactly-once)或至少一次(At-least-once)语义。
Schema演进:使用Avro或Schema Registry兼容变更。
安全与合规:敏感数据脱敏、加密传输、访问控制。
资源隔离:避免采集任务影响线上业务。
成本控制:合理选择云服务或自建方案。
八、未来演进
趋势:实时化、自动化(数据发现与采集)、云原生托管服务。
技术:Flink CDC逐步替代传统ETL。
评论