并发控制
Paimon支持多个并发写作业的乐观并发。
每个作业以自己的速度写入数据,并基于当前快照在提交时通过应用增量文件(删除或添加文件)生成新快照。
这里可能有两种类型的提交失败:
- 快照冲突:快照id已被抢占,表已经从另一个作业生成新的快照,这时会再次提交。
- 文件冲突:此作业要删除的文件已被其他作业删除,此时,此作业只能失败。(对于流作业,它将失败并重启,故意故障转移一次)
快照冲突
Paimon的快照ID是唯一的,因此只要作业将其快照文件写入文件系统,就被认为是成功的。
Paimon使用文件系统的重命名机制来提交快照,这对HDFS来说是安全的,因为它确保了事务和原子重命名。
但是对于像OSS和S3等对象存储,它们的重命名没有原子语义,我们需要配置Hive或jdbc元存储,并为目录启用“lock.enabled”选项,否则,可能会丢失快照。
文件冲突
当Paimon提交文件删除(这只是一个逻辑删除)时,它会检查是否与最新快照冲突。如果冲突(这意味着文件已经被逻辑删除),它不能再在此提交节点上继续,因此,它只能故意触发故障转移以重新启动,作业将从文件系统中检索最新状态,以期望解决此冲突。
Paimon将确保这里没有数据丢失或重复,但是,如果两个流作业同时写入并且存在冲突,你将看到它们不断重启,这不是一件好事。
冲突的本质在于删除文件(逻辑上),删除文件是从压缩中诞生的,所以只要我们关闭写作业的压缩(将“write-only”设置为“true”)并开启单独的作业来做压缩工作,一切就都很好。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。