维度表一般采用旁路缓存异步IO的方案,但是如果一些维度表很大,对数据处理延迟要求高,旁路缓存模式IO不能满足需求的情况可以考虑使用RocksDB来解决。RocksDBStateBackend 作为状态后端来避免频繁的数据库连接和读取操作。
**首先**:RocksDB状态是存在本地磁盘的,CheckPoint存在HDFS
**其次**:RocksDB状态是按key分片存储在各个节点的磁盘上的,处理数据的时候,Flink 框架负责保证数据项与其对应键的状态之间的一致性匹配。开发者不需要担心数据项会被错误地发送到处理不了该键状态的实例。但是当我们(non-key)属性进行数据关联,比如日期,而不是原始键(如 ID),这时就不能直接依赖 Flink 的 keyBy 分区机制来直接访问状态了,因为 keyBy 机制确保的是相同键的数据项会被路由到相同的并行实例。对于基于时间或其他非键属性进行关联的情况需要另辟蹊径,这也是局限性和问题。
**RocksDB的磁盘IO性能问题**:
虽然 RocksDB 会产生磁盘 I/O,但它通过各种方式优化了 I/O 性能:
批量写入:通过批量处理写入操作来减少 I/O 次数。
增量检查点(Incremental Checkpoints):Flink 的 RocksDBStateBackend 可以只对改变的部分进行检查点保存,减少数据的写入量。
合并读取和压缩策略:通过智能的读取和压缩策略减少磁盘访问次数和优化存储空间使用。
**集群影响**:因为涉及磁盘IO,SSD是必要的,而且会有缓存,合并和压缩的时候也会对cpu有一定依赖。
Flink的RocksDB的使用以及问题
于 2024-04-04 07:05:04 首次发布