我使用的是处理器API(PAPI)拓扑。
是否可以从Processor API中访问使用DSL创建的KTable(或GlobalKTable)(即使是只读的)?
即。使用:
val builder = new StreamsBuilder()
val KTable = builder.table("topicname")
我得到了一个KTable,但拓扑只允许你将addStateStore与StoreBuilder一起使用,而不是KTable本身。
.addStateStore(myStoreBuilder, MY_PROCESSOR_NAME)
所以我可以通过这样做来构建一个:
def keyValueStoreBuilder[K, V](storeName: String, keySerde: Serde[K], valueSerde: Serde[V]): StoreBuilder[KeyValueStore[K, V]] = {
Stores.keyValueStoreBuilder(
Stores.persistentKeyValueStore(storeName),
keySerde,
valueSerde)
}
但是,在这种情况下如何干净地获得storeName
?
答案 0 :(得分:2)
创建Topology#describe()
时,它会自动在内部创建一个带有生成名称的商店。 (您可以通过table()
获取名称)。您还可以使用Materialized
参数通过Processor
方法为商店指定名称。
我有点不清楚,你的意思是"访问处理器API中的KTable"虽然?如果您的意思是"在Topology#connectProcessorAndStateStores()
"内访问KTable商店。您可以使用table()
授予处理器对商店的访问权限。请注意,处理器永远不应写入KTable存储区,因为ANDROID_SDK_ROOT
运算符负责维护表的状态。如果您确实写入了商店,则无法保证,如果发生故障,您可能会丢失数据。