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的这点特性就行增量备份的
flink选择rocksdb存储的原因
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- Intro Flink之所以能够做到高效而准确的有状态流式处理,核心是依赖于检查点(checkpoint)机制。当...
- 本文仅为笔者平日学习记录之用,侵删原文:https://mp.weixin.qq.com/s/KNVRs4k8nH...
- State State简述 State分类: Keyed state Operator state State两种...
- 前言 这篇从半个月前就开始写,断断续续写到现在,终于能发了(被简书吞了好几次),不容易。 最近笔者正在补习与Roc...