Flink RockDB的ColumnFamily來自哪裡?
- 2019 年 11 月 3 日
- 筆記
版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/jsjsjs1789/article/details/102845109
結論: ColumnFamily Name==ColumnFamilyDescirptor Name == StateDescriptor Name
解釋:
kuduErrorDescriptor = new ListStateDescriptor<>("test", TypeInformation.of(new TypeHint<Object>() { })); kuduErrorDescriptor.enableTimeToLive(ttlConfig); listState = getRuntimeContext().getListState(kuduErrorDescriptor);
用過 Flink KeyedState的小夥伴,相信很熟悉上面的程式碼。 程式碼中的"test"就是StateDescriptor Name。但是ColumnFamily Name==ColumnFamilyDescirptor Name == StateDescriptor Name為什麼會成立呢? 我們以ListState為例: getRuntimeContext().getListState(kuduErrorDescriptor);一路跟程式碼我們可以看到 RocksDBKeyedStateBackend 中 tryRegisterKvStateInformation方法
...... //第一次獲取state //將stateDesc.getName()賦值給newMetaInfo name newMetaInfo = new RegisteredKeyValueStateBackendMetaInfo<>( stateDesc.getType(), stateDesc.getName(), namespaceSerializer, stateSerializer, StateSnapshotTransformFactory.noTransform()); newRocksStateInfo = RocksDBOperationUtils.createStateInfo( newMetaInfo, db, columnFamilyOptionsFactory, ttlCompactFiltersManager); ......
追蹤createStateInfo
//將metaInfoBase name賦值給 columnFamilyDescriptor name ColumnFamilyDescriptor columnFamilyDescriptor = createColumnFamilyDescriptor( metaInfoBase, columnFamilyOptionsFactory, ttlCompactFiltersManager); return new RocksDBKeyedStateBackend.RocksDbKvStateInfo(createColumnFamily(columnFamilyDescriptor, db), metaInfoBase);
追蹤createColumnFamily到 RocksDB 的createColumnFamily
public ColumnFamilyHandle createColumnFamily( final ColumnFamilyDescriptor columnFamilyDescriptor) throws RocksDBException { return new ColumnFamilyHandle(this, createColumnFamily(nativeHandle_, //傳入columnFamilyDescriptor name , columnFamilyDescriptor.columnFamilyName(), columnFamilyDescriptor.columnFamilyOptions().nativeHandle_)); }
繼續發現其調用本地方法
//利用columnFamilyDescriptor name 創建 columnFamily private native long createColumnFamily(final long handle, final byte[] columnFamilyName, final long columnFamilyOptions) throws RocksDBException;
補充: rockdb families之間可以共享 write-ahead log 不共享 memtables 和 table files