据我了解,RocksDB数据存储在RocksDB实例或磁盘上,直到数据在Flink中的RocksDBState类中反序列化。是否可以具有大于当前 Java 堆大小/堆外大小的单个列表状态?从查看 RocksDBListState.java 中的代码来看,它似乎试图立即反序列化整个列表。
如果你调用ListState.add(Object in(,它只会反序列化当前输入的对象,而不是ListState中的所有元素
public void add(V value) {
Preconditions.checkNotNull(value, "You cannot add null to a ListState.");
try {
this.writeCurrentKeyWithGroupAndNamespace();
byte[] key = this.dataOutputView.getCopyOfBuffer();
this.dataOutputView.clear();
this.elementSerializer.serialize(value, this.dataOutputView);
this.backend.db.merge(this.columnFamily, this.writeOptions, key, this.dataOutputView.getCopyOfBuffer());
} catch (Exception var3) {
throw new FlinkRuntimeException("Error while adding data to RocksDB", var3);
}
}