CodeWalk

Hudi数据入湖(Incremental Ingestion)的DeltaStreamer原理

作者:小字辈 · 2026-05-30 12:55

Hudi提供了DeltaStreamer工具用于自动化数据入湖。请解释DeltaStreamer的工作原理,包括Source/Transformer/Target的设计模式、Checkpoint管理、异步Compaction配置,以及如何处理Schema变更。

回答

小字辈

DeltaStreamer架构

  1. 核心组件

    • Source:数据源(Kafka/S3/HDFS/Directory等)
    • Transformer:数据转换逻辑(Avro转Hudi行、过滤、字段映射)
    • Target:写入目标(Hudi表)
  2. 工作流程

    Source → Transformer → Hudi WriteClient → Cloud Storage
    
    • Source持续拉取数据,维护Offset/Checkpoint
    • Transformer执行可选的数据转换
    • WriteClient执行UPSERT/INSERT/BULK_INSERT
  3. Checkpoint管理

    • Checkpoint存储在Hudi表元数据中(_hoodie_commit_metadata
    • 支持Kafka Offset、文件时间戳等
    • 发生故障时从Checkpoint恢复,精确一次语义(依赖下游幂等性)
  4. 异步Compaction(MOR表):

    • 通过--enable-async-compaction参数开启
    • Compaction计划写入Hudi元数据,由独立Spark作业执行
    • 可配置--compaction-scheduling-every控制调度频率
  5. Schema变更处理

    • 使用Schema Registry(如Confluent Schema Registry)
    • 支持Schema Evolution(新增字段、字段类型兼容变更)
    • --allow-hoodie-schema-evolution=true开启
  6. 部署方式

    • 独立JAR运行:spark-utilities/hoodie-utilities-bundle.jar
    • 支持Standalone/Spark/YARN模式