适用于版本0.10.1。
本文讨论在多个写入时的并发模型。
使用DeltaStreamer和 Hudi datasource。
1 支持的并发控制
(1) MVCC
使用单一写入和多个读取保证快照隔离。
(2) 乐观并发
当前处于试验阶段,并且需要ZK或Hive Metastore。
支持文件级别OCC(Optimitic Concurrency Control)。如没有覆盖的多个写可以成功。
2 单写保证
可通过write operations理解Judi datasource和delta streamer的不同保证。
3 多写保证
由于使用了OCC,在去重和顺序保证上有变化。
Upsert
目标表不会展示重复
Insert
即使开启dedup也可能有重复
Bulk_insert
即使开启dedup也可能有重复
Incremental pull
可能由于写作业异步完成导致乱序
4 启用多写
1 | # 开启OCC |
5 DataSource Writer
hudi-spark模块提供API将Spark Dataframe转换为hudi表。
1 | # 示例 |
6 DeltaStreamer
hudi-utilities-bundle模块中的HoodieDeltaStreamer提供了DFS、Kafka等多种来源消费数据的能力。
使用OCC需要向来源配置文件中添加前述配置。
1 | # 使用DeltaStreamer消费Kafka数据 |
7 使用乐观并发控制的最佳实践
由于网络、并发量和提交操作可能导致获取锁超时,可以通过以下配置设置重试:
1 | # 使用原生锁配置,全局配置 |
8 取消多写
1 | hoodie.write.concurrency.mode=single_writer |
9 警告
如果使用WriteClient多写,不建议复用实例。