环境
hudi upsert写过程最为复杂,流程上有一个桶分配
的环节,当以flink state为索引时,流程变得更长,所以写入性能较差。
- hudi 0.13.0
- mor表+insert/upsert 或 cow表+upsert
- flink状态索引
核心类为BucketAssignFunction
和StreamWriteFunction
由于存在着语义上的迷惑,从flink 0.13.1开始mor insert将不再走upsert写过程,而是与cow insert合并,至此,insert统一为append模式,写入只生成parquet文件
整体流程
| pk1,pk4 | ===\ /=== | bucket assigner1 | ===\ /=== | write task1(pk1,pk2) |
shuffle(by PK) shuffle(by bucket ID)
| pk2,pk3 | ===/ \=== | bucket assigner2 | ===/ \=== | write task2(pk3,pk4) |
- 流中的数据先根据主键进行shuffle,由于主键的唯一性,所以同一记录后续的变更都会分配到相同的bucket a