gpt4 book ai didi

java - 如何在同一主题上使用globalKtable和StateStore?

转载 作者:行者123 更新时间:2023-12-02 01:15:31 27 4
gpt4 key购买 nike

澄清一下,我是 Kafka 的新手,如果我的问题似乎没有记录,我很抱歉,我正在阅读教程、文档和我能理解的一切内容。

我正在尝试从 GlobalStore 读取所有值以更新其值,然后使用已存在的 StateStore 来放置这些新的更新值。

我正在尝试这样做,因为当我这样做时:

this.stateStore.all();

我只有1/10的数据,如果我理解正确的话,这是因为我有10个分区,而ss,只读取一个(虽然我不太明白为什么)

这是我的全局表:

    public StreamsBuilder declareTopology(StreamsBuilder builder) {

logger.debug("Building topology : input topic ~ {} ; output topics ~ {}, {}",
getInputTopic(),
getDataTopic(),
getToEsTopic());

builder.globalTable(
getDataTopic(),
Consumed.with(Serdes.String(), fooSerdes)
.withOffsetResetPolicy(Topology.AutoOffsetReset.EARLIEST),
Materialized.<String, Foo, KeyValueStore<Bytes, byte[]>>as(
"foosktable")
.withKeySerde(Serdes.String())
.withValueSerde(fooSerdes)
.withLoggingEnabled(new HashMap<>()));
...

这是 addStateStore,我无法删除它,因为它在代码的其他地方使用:

       ...

builder.addStateStore(
Stores.keyValueStoreBuilder(
Stores.persistentKeyValueStore("foosktable"),
Serdes.String(),
fooSerdes));
...

return builder;
}

所以,从理论上讲,我想做的是删除也使用相同主题的 StateStore,并将我的数据使用我的 data.process 主题之一,问题是该处理器用它做其他事情StateStore,所以我不能用核武器攻击它。

我在这里迷路了,任何光都会有很大帮助。谢谢!

最佳答案

有点不清楚您实际想要实现的目标。但是,一些高级解释:

GlobalKTable 只有一个用途:从主题读取数据而不进行修改,以允许执行 KStream-GlobalKTable-join 或通过“查询存储”交互式查询”。

因此,您无法真正执行您想要的操作,因为无法按照您的意图将数据从全局存储复制到另一个存储。您需要复制输入主题并读取两次:(1) 作为 GlobalKTable 和 (2) 作为常规 KStream 来修改数据,然后再将其放入存储中。对于 (2),您可以使用 transform()

希望这有帮助。

关于java - 如何在同一主题上使用globalKtable和StateStore?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58687018/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com