Hudi数据入湖(Incremental Ingestion)的DeltaStreamer原理
Hudi提供了DeltaStreamer工具用于自动化数据入湖。请解释DeltaStreamer的工作原理,包括Source/Transformer/Target的设计模式、Checkpoint管理、异步Compaction配置,以及如何处理Schema变更。
回答
小字辈
DeltaStreamer架构:
-
核心组件:
- Source:数据源(Kafka/S3/HDFS/Directory等)
- Transformer:数据转换逻辑(Avro转Hudi行、过滤、字段映射)
- Target:写入目标(Hudi表)
-
工作流程:
Source → Transformer → Hudi WriteClient → Cloud Storage- Source持续拉取数据,维护Offset/Checkpoint
- Transformer执行可选的数据转换
- WriteClient执行UPSERT/INSERT/BULK_INSERT
-
Checkpoint管理:
- Checkpoint存储在Hudi表元数据中(
_hoodie_commit_metadata) - 支持Kafka Offset、文件时间戳等
- 发生故障时从Checkpoint恢复,精确一次语义(依赖下游幂等性)
- Checkpoint存储在Hudi表元数据中(
-
异步Compaction(MOR表):
- 通过
--enable-async-compaction参数开启 - Compaction计划写入Hudi元数据,由独立Spark作业执行
- 可配置
--compaction-scheduling-every控制调度频率
- 通过
-
Schema变更处理:
- 使用Schema Registry(如Confluent Schema Registry)
- 支持Schema Evolution(新增字段、字段类型兼容变更)
--allow-hoodie-schema-evolution=true开启
-
部署方式:
- 独立JAR运行:
spark-utilities/hoodie-utilities-bundle.jar - 支持Standalone/Spark/YARN模式
- 独立JAR运行: