Flink状态后端和CheckPoint 调优

Flink状态后端和CheckPoint 调优

💡 原文中文,约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 设置需要平衡时效性和性能,建议根据任务状态大小调整时间间隔。

➡️

继续阅读