💡
原文中文,约6100字,阅读约需15分钟。
📝
内容提要
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 设置需要平衡时效性和性能,建议根据任务状态大小调整时间间隔。
➡️