一. Changelog 模式
如果希望 Hoodie 保留消息的所有變更(I/-U/U/D), 之後接上 Flink 引擎的有狀態計算實現全鏈路近實時數倉(增量計算), Hoodie 的 MOR 表通過行存 原生支持 保留消息的所有變更(format 層面的集成), 通過流讀MOR 表可以消費到所有的變更記錄。
1.1 WITH 參數
名稱 | Required | 默認值 | 說明 |
---|---|---|---|
changelog.enabled | false | false | 默認是關閉的,即UPSERT語義,所有的消息僅保證最後一條合併消息,中間的變更可能會被merge掉: 改爲true支持消費所有的變更 |
批(快照) 讀仍然會合並所有的中間結果, 不管 format 是否已經存儲中間的狀態。
開啓 changelog.enabled 參數後, 中間的變更也只是 Best Effort: 異步IDE壓縮任務會將中間變更合併成1條,所以如果流讀消費不夠及時,被壓縮後只能讀取到最後一條記錄。當然,通過調整壓縮的buffer時間可以預留一定的時間 buffer 給 reader, 比如調整壓縮比。
二. Append 模式
從 0.10 開始支持
對於INSERT模式:
- MOR 默認會 apply小文件策略: 會追加寫 avro log 文件
- COW 每次直接寫新的 parquet 文件,沒有小文件策略
Hudi 支持豐富的 Clustering 策略, 優化 INSERT 模式下的小文件問題。
2.1 Inline Clustering
只有 Copy On Write 表支持該模式
名稱 | Required | 默認值 | 說明 |
---|---|---|---|
write.insert.cluster | false | false | 是否在寫入時合併小文件,COW表默認insert寫不合並小文件,開啓參數後, 每次寫入會優先合併之前的小文件(不會去重), 吞吐會受影響 |
2.2 Async Clustering
從 0.12 開始支持
名稱 | Required | 默認值 | 說明 |
---|---|---|---|
clustering.scheduler.enabled | false | false | 是否在寫入時定時異步調度 clustering plan,默認關閉 |
clustering.delta_commits | false | 4 | 跳讀 clustering plan 的間隔 commits |
clustering.async.enabled | false | false | 是否異步執行 clustering plan,默認關閉 |
clustering.tasks | false | 4 | Clustering task 執行併發 |
clustering.plan.strtegy.target.file.max.bytes | false | 102410241024 | Clustering 單文件目標大小,默認1GB |
clustering.plan.strategy.small.file.limit | false | 600 | 小於該大小的文件纔會參與clustering |
clustering.plan.strategy.sort.columns | false | N/A | 支持指定特殊的排序字段 |
clustering.plan.partition.filter.mode | false | NONE | 支持 NONE: 不做限制 RECET DAYS:按時 |