Flink和RocksDB-列表状态是否大于主内存?

据我了解,rocksDB数据会在堆中存储在rocksDB实例或磁盘中,直到在Flink的rocksDBState类中反序列化数据为止。是否可以有一个大于当前Java堆大小/非堆大小的列表状态?通过查看rocksDBListState.java中的代码,似乎它试图立即反序列化整个列表。

guojinfei 回答:Flink和RocksDB-列表状态是否大于主内存?

如果您调用ListState.add(Object in),则只会反序列化当前输入的Object,而不会反序列化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);
    }
}
本文链接:https://www.f2er.com/2970444.html

大家都在问