4. 数据采集与接入:批采集(Sqoop/DataX)、流采集(Canal/Kafka Connect)、实时接入架构设计

数据采集是批流链路的起点,决定了上游数据能否完整、及时、一致地进入金融图谱处理层。本章围绕批采集与流采集两类主流工具,以及实时接入的总体架构展开,帮助读者建立从工具选型到架构设计的完整认知。

4.1 批采集:Sqoop 与 DataX 对比

批采集适用于离线 T+1 或小时级数据同步场景,典型任务包括:从关系型数据库(MySQL/Oracle)抽取客户信息表、交易流水表到 Hive/HDFS,或从 Hive 导出计算结果到业务库。

对比维度SqoopDataX
开发方Apache / Cloudera阿里巴巴
运行模式MapReduce 作业独立进程 + 插件架构
数据源支持RDBMS、HDFS、Hive、HBaseRDBMS、HDFS、Hive、HBase、MongoDB、ES、FTP 等 30+ 插件
断点续传需借助 --split-by 与检查点内置 Channel 级断点续传
增量抽取支持 --incremental append/lastmodified支持 where 条件 + 时间戳
金融场景适配需额外处理 Oracle 序列化问题内置 Oracle 时间类型、CLOB 优化
社区活跃度2018 年后基本停滞持续更新,阿里云 DataWorks 集成
选型建议:存量 Hadoop 生态且无复杂转换需求,可继续使用 Sqoop;新项目或需要多数据源、断点续传、金融级稳定性,优先选择 DataX。

4.1.1 DataX 批采集作业示例(MySQL → HDFS)

{
  "job": {
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "connection": [{
              "jdbcUrl": ["jdbc:mysql://10.0.1.10:3306/finance_db"],
              "table": ["t_customer_account"]
            }],
            "username": "datax_user",
            "password": "encrypted_pwd",
            "column": ["account_id", "customer_name", "balance", "update_time"],
            "where": "update_time >= '2025-01-01 00:00:00'"
          }
        },
        "writer": {
          "name": "hdfswriter",
          "parameter": {
            "defaultFS": "hdfs://nameservice1",
            "path": "/user/finance/ods/t_customer_account",
            "fileType": "parquet",
            "writeMode": "append",
            "compress": "snappy"
          }
        }
      }
    ],
    "setting": {
      "speed": {"channel": 4},
      "errorLimit": {"record": 100}
    }
  }
}
金融实践:生产环境建议开启 DataX 的 channel 流控,避免抽取高峰打爆源库连接池;同时使用 where 条件做增量时间窗口,减少全量扫描。

4.2 流采集:Canal 与 Kafka Connect

流采集面向毫秒级实时接入,核心场景包括:监听 MySQL Binlog 获取交易流水、账户变更;采集 Kafka 日志进入实时计算引擎;同步 Elasticsearch 索引变更等。

4.2.1 Canal:MySQL Binlog 实时采集

Canal 模拟 MySQL Slave 节点,解析 Binlog 的 Row 模式变更事件,输出为 JSON 格式的 Insert/Update/Delete 消息。金融场景下常用于交易流水、风控规则变更的实时捕获。

# canal 实例配置示例(conf/example/instance.properties)
canal.instance.master.address=10.0.1.10:3306
canal.instance.dbUsername=canal_user
canal.instance.dbPassword=canal_pwd
canal.instance.connectionCharset=UTF-8
canal.instance.filter.regex=fins_db\\..*
# 只监听 fins_db 下所有表
canal.mq.topic=fin_binlog_topic
canal.mq.partitionsNum=6
注意:金融核心库的 Binlog 必须开启 Row 模式,且 Canal 账号需授予 SELECT, REPLICATION SLAVE, REPLICATION CLIENT 权限;建议 Canal Server 与业务库网络隔离,通过专线或 VPN 连接。

4.2.2 Kafka Connect:多源流采集框架

Kafka Connect 是 Kafka 生态的流数据集成框架,通过 Source Connector 从外部系统拉取数据,通过 Sink Connector 写入目标系统。金融图谱中常用 Debezium(MySQL/MongoDB CDC)作为 Source,Elasticsearch Sink 作为索引同步。

特性CanalKafka Connect (Debezium)
数据源范围MySQL BinlogMySQL、PostgreSQL、MongoDB、Oracle、SQL Server
输出格式JSON(自定义)Avro / JSON Schema / Protobuf
Schema 管理无内置 Schema Registry集成 Confluent Schema Registry
容错机制基于 ZK 记录位点基于 Kafka Offset + 内部 Topic
金融适用性轻量、低延迟,适合纯 MySQL 场景多源异构、Schema 演进,适合复杂图谱

4.3 实时接入架构设计

金融图谱的实时接入层需要同时处理高吞吐、低延迟、数据一致性三个核心挑战。下图展示了一套经过生产验证的批流一体接入架构。

金融图谱实时接入架构设计 数据源层 MySQL 核心库 / Oracle 交易库 Kafka 日志 / 文件服务器 采集层 Canal / Debezium (CDC) DataX (批) / FileBeat (日志) 消息队列层 Kafka / Pulsar Topic: fin_binlog, fin_trade 实时处理层 Flink / Spark Streaming CEP 规则引擎 / 图谱关联 存储层 Neo4j / JanusGraph (图谱) HBase / ClickHouse (指标) 服务层 图谱查询 API / 风控决策 数据血缘 / 链路监控 批处理补充路径 DataX 离线同步 → Hive/ODS

4.3.1 架构设计要点

  1. CDC 优先,轮询兜底:核心交易库使用 Canal/Debezium 监听 Binlog,实现毫秒级变更捕获;对无 Binlog 能力的系统(如部分文件接口),使用 DataX 定时轮询作为补充。
  2. 消息队列解耦:所有采集数据先入 Kafka/Pulsar,避免采集端与处理端直接耦合;利用 Topic 分区机制实现并行消费,单 Topic 吞吐可达 10 万条/秒。
  3. Schema 统一管理:引入 Schema Registry,确保 CDC 消息的字段变更(新增列、类型修改)能被下游 Flink 任务自动识别,避免反序列化失败。
  4. 链路监控与位点回溯:在采集端记录 Binlog 位点(GTID/File+Pos),在 Kafka 端记录 Offset,支持 7 天内任意时间点的数据回溯重放。
金融级要求:实时接入链路必须支持 Exactly-Once 语义(通过 Kafka 事务 + Flink 两阶段提交),且端到端延迟控制在 3 秒以内(P99)。建议对每张核心表配置独立的 Canal 实例,避免表间相互影响。

4.4 批流采集选型决策矩阵

场景推荐工具延迟要求一致性级别备注
MySQL 交易流水实时采集Canal / Debezium< 1sAt-Least-Once配合 Kafka 幂等写入
Oracle 历史数据批量迁移DataXT+1Exactly-Once使用 Channel 流控
MongoDB 变更捕获Debezium MongoDB Connector< 2sAt-Least-Once需开启 Oplog
日志文件采集FileBeat + Kafka Connect< 5sAt-Least-Once支持多行合并
Hive → 业务库导出DataX HdfsReader + RdbmsWriterT+1Exactly-Once预分区 + 事务写入
实战建议:在金融图谱项目中,建议将批采集与流采集统一纳入同一个调度平台(如 Apache DolphinScheduler 或自研调度),通过 DAG 编排实现批流任务的血缘追踪和依赖管理。