flink选择rocksdb存储的原因
2021-04-05 本文已影响0人
熊云昆
rocksdb相对于mysql等数据库来说,比较小众,即使接触过一段时间flink后,还是会很好奇flink为啥要选择rocksdb来做状态存储,这里总结一下为啥flink选择rocksdb做状态存储的原因。
1.rocksdb采用的是LSM(Log-Struct Merge)结构,对于LSM不了解的可以参考这篇文章:从B+树到LSM树,及LSM树在HBase中的应用,LSM相对于mysql里面的B+树来说,是写更有优势,而读则比不过B+树,但是因为flink采用的keygroup的概念Flink 源码:从 KeyGroup 到 Rescale,flink保存的keyedstate分散到每个算子的key其实有序的,而rocksdb存储的每个key也是有序排列的,通过blomfilter和二分查找法来查询数据。
2.rocksdb本身也是一种嵌入式数据库,相对于flink的每个算子来说,每个算子的rocksdb可以理解成一个单独的数据库,他们之间不会存在读写并发的问题(因为针对每个算子来说,存储的keyedstate中的key是不会有重复的)
3.rocksdb中memtable是insert或者delete的数据,每次备份的时候只需要备份memtable以及各个层级合并后新产生的文件,无需全部文件进行备份,flink的增量备份就是利用了rocksdb的这点特性就行增量备份的