内容提要
RocksDB是一种嵌入式的Key-Value数据库,用作Flink中的RocksDBStateBackend的底层存储。它通过多层组织持久化数据,并通过异步Compaction合并重复、过期和已删除的数据。在写入过程中,数据会经过序列化后写入到WriteBuffer,再从内存flush到磁盘上。在读取过程中,会先尝试从WriteBuffer和Immutable Memtable中读取数据,如果没有找到,则会查询Block Cache和底层的SST文件。RocksDBKeyedStateBackend增量快照将差异上传到分布式文件系统,并通过SharedStateRegistry进行状态的注册和过期。RocksDB的性能调优方法包括开启性能监控、增量CheckPoint和本地恢复、设置多目录、调整RocksDB选项、增大block缓存、调整write buffer和level阈值、增大write buffer数量和后台线程数、开启分区索引功能。设置Checkpoint时需要考虑时效性和性能之间的平衡。
关键要点
-
RocksDB 是嵌入式的 Key-Value 数据库,用于 Flink 的 RocksDBStateBackend。
-
RocksDB 通过多层组织持久化数据,并使用异步 Compaction 合并重复和过期的数据。
-
写入过程中,数据经过序列化后写入 WriteBuffer,再 flush 到磁盘;读取时优先从 WriteBuffer 和 Immutable Memtable 中查找。
-
RocksDBKeyedStateBackend 增量快照将状态差异上传到分布式文件系统,并通过 SharedStateRegistry 进行状态注册和过期。
-
增量快照涉及多线程上传/下载文件和 JobMaster 引用计数,复杂性较高,可能导致性能瓶颈。
-
RocksDB 的性能调优方法包括开启性能监控、增量 CheckPoint、本地恢复、设置多目录、调整选项和缓存等。
-
开启 State 访问性能监控可以帮助分析性能,但会有一定的性能损失。
-
增量 CheckPoint 是 RocksDB 唯一支持的增量检查点功能,可以通过配置开启。
-
设置多目录可以分担 I/O 压力,建议使用多块磁盘。
-
调整 RocksDB 的预定义选项和参数可以显著提高性能,尤其是在大状态场景下。
-
增大 block 缓存和 write buffer 的数量及大小可以提高读写性能。
-
开启分区索引功能可以提升性能,尤其是在内存较小的场景中。
-
Checkpoint 设置需要平衡时效性和性能,建议根据任务状态大小调整时间间隔。