目录

0. 相关文章链接

1. 流读(Streaming Query)

2. 增量读取(Incremental Query)

3. 限流


0. 相关文章链接

 Hudi文章汇总 

1. 流读(Streaming Query)

        当前表默认是快照读取,即读取最新的全量快照数据并一次性返回。通过参数read.streaming.enabled 参数开启流读模式,通过 read.start-commit 参数指定起始消费位置,支持指定 earliest 从最早消费。

WITH参数:

名称

Required

默认值

说明

read.streaming.enabled

false

false

设置 true 开启流读模式

read.start-commit

false

最新 commit

指定 'yyyyMMddHHmmss' 格式的起始 commit(闭区间)

read.streaming.skip_compaction

false

false

流读时是否跳过 compaction 的 commits,跳过 compaction 有两个用途:

1)避免 upsert 语义下重复消费 (compaction 的 instant 为重复数据,如果不跳过,有小概率会重复消费)

2) changelog 模式下保证语义正确性

0.11 开始,以上两个问题已经通过保留 compaction instant time 修复

clean.retain_commits

false

10

cleaner 最多保留的历史 commits 数,大于此数量的历史 commits 会被清理掉,changelog 模式下,这个参数可以控制 changelog 的保留时间,例如 checkpoint 周期为 5 分钟一次,默认最少保留 50 分钟的时间。

注意:当参数 read.streaming.skip_compaction 打开并且 streaming reader 消费落后于clean.retain_commits 数时,流读可能会丢失数据。从 0.11 开始,compaction 不会再变更 record 的 instant time,因此理论上数据不会再重复消费,但是还是会重复读取并丢弃,因此额外的开销还是无法避免,对性能有要求的话还是可以开启此参数。

CREATE TABLE t5(
   uuid VARCHAR(20) PRIMARY KEY NOT ENFORCED,
   name VARCHAR(10),
   age INT,
   ts TIMESTAMP(3),
   `partition` VARCHAR(20)
 ) WITH (
   'connector' = 'hudi',
   'path' = 'hdfs://hadoop1:8020/tmp/hudi_flink/t5',
   'table.type' = 'MERGE_ON_READ',
  'read.streaming.enabled' = 'true',
   'read.streaming.check-interval' = '4'   -- 默认60s
 ); insert into t5 select * from sourceT;
select * from t5;

2. 增量读取(Incremental Query)

Hudi从 0.10.0 开始支持增量读取。如果有增量读取 batch 数据的需求,增量读取包含三种场景

  • Stream 增量消费,通过参数 read.start-commit 指定起始消费位置;
  • Batch 增量消费,通过参数 read.start-commit 指定起始消费位置,通过参数 read.end-commit 指定结束消费位置,区间为闭区间,即包含起始、结束的 commit;
  • TimeTravel:Batch 消费某个时间点的数据:通过参数 read.end-commit 指定结束消费位置即可(由于起始位置默认从最新,所以无需重复声明);

WITH 参数:

名称

Required

默认值

说明

read.start-commit

false

默认从最新 commit

支持 earliest 从最早消费

read.end-commit

false

默认到最新 commit

3. 限流

        如果将全量数据(百亿数量级) 和增量先同步到 kafka,再通过 flink 流式消费的方式将库表数据直接导成 hoodie 表,因为直接消费全量部分数据:量大(吞吐高)、乱序严重(写入的 partition 随机),会导致写入性能退化,出现吞吐毛刺,这时候可以开启限速参数,保证流量平稳写入。

WITH 参数:

名称

Required

默认值

说明

write.rate.limit

false

0

默认关闭限速


注:其他Hudi相关文章链接由此进 ->  Hudi文章汇总