RocksDB
flink在生产环境中常用RocksDB作为状态后端
1、subtask在taskmanager中作为一个线程运行,如果设置了RocksDB状态后端,RocksDB也会启动一个独立的线程,供subtask来使用。
2、RocksDB是一个kv数据库,因此只能存储flink的键控状态,算子状态还是会放到subtask中。
3、RocksDB会单独占据一块flink内存,它不受JVM GC管控
4、RocksDB会把数据存储到taskmanager所在磁盘上。
5、RocksDB比HashBackend的优点在于,状态数据存储空间大,文件存储更加稳定
使用RocksDB
<!-- RocksDB状态后端使用开始 -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-statebackend-rocksdb_${scala.version}</artifactId>
<version>${flink.version}</version>
</dependency>
// timer优化
Configuration conf = new Configuration();
ConfigOption<String> timer = ConfigOptions.key("state.backend.rocksdb.timer-service.factory").stringType().noDefaultValue();
conf.set(timer, "HEAP");
StreamExecutionEnvironment env = Strea