并发控制

Paimon支持多个并发写作业的乐观并发。
每个作业以自己的速度写入数据,并基于当前快照在提交时通过应用增量文件(删除或添加文件)生成新快照。

这里可能有两种类型的提交失败:

  1. 快照冲突:快照id已被抢占,表已经从另一个作业生成新的快照,这时会再次提交。
  2. 文件冲突:此作业要删除的文件已被其他作业删除,此时,此作业只能失败。(对于流作业,它将失败并重启,故意故障转移一次)

快照冲突

Paimon的快照ID是唯一的,因此只要作业将其快照文件写入文件系统,就被认为是成功的。
image.png
Paimon使用文件系统的重命名机制来提交快照,这对HDFS来说是安全的,因为它确保了事务和原子重命名。

但是对于像OSS和S3等对象存储,它们的重命名没有原子语义,我们需要配置Hive或jdbc元存储,并为目录启用“lock.enabled”选项,否则,可能会丢失快照。

文件冲突

当Paimon提交文件删除(这只是一个逻辑删除)时,它会检查是否与最新快照冲突。如果冲突(这意味着文件已经被逻辑删除),它不能再在此提交节点上继续,因此,它只能故意触发故障转移以重新启动,作业将从文件系统中检索最新状态,以期望解决此冲突。
image.png
Paimon将确保这里没有数据丢失或重复,但是,如果两个流作业同时写入并且存在冲突,你将看到它们不断重启,这不是一件好事。

冲突的本质在于删除文件(逻辑上),删除文件是从压缩中诞生的,所以只要我们关闭写作业的压缩(将“write-only”设置为“true”)并开启单独的作业来做压缩工作,一切就都很好。


博弈
2.5k 声望1.5k 粉丝

态度决定一切


« 上一篇
Paimon 概述
下一篇 »
Paimon Catalog

引用和评论

0 条评论