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

Java 如何在同一主题上使用globalKtable和StateStore?,java,apache-kafka,apache-kafka-streams,kafka-producer-api,Java,Apache Kafka,Apache Kafka Streams,Kafka Producer Api,我只是想澄清一下,我是卡夫卡的新手,所以如果我的问题似乎没有记录在案,我很抱歉,我正在阅读教程、文档和所有我能理解的东西 我试图从GlobalStore读取所有值以更新其值,然后使用已经存在的StateStore来放置这些新的更新值 我之所以这么做是因为当我这么做的时候: this.stateStore.all(); 我只有十分之一的数据,如果我理解正确的话,这是因为我有10个分区,而ss只读取一个(尽管我不清楚为什么) 这是我的环球表: public StreamsBuilder d

我只是想澄清一下,我是卡夫卡的新手,所以如果我的问题似乎没有记录在案,我很抱歉,我正在阅读教程、文档和所有我能理解的东西

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

我之所以这么做是因为当我这么做的时候:

this.stateStore.all();
我只有十分之一的数据,如果我理解正确的话,这是因为我有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<>()));
    ...
所以,理论上,我想做的是删除同样使用同一主题的StateStore,并使用我的data.process主题之一来放置数据,问题是这个处理器用这个StateStore做其他事情,所以我不能使用nuke


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

有点不清楚你到底想达到什么目的。但是,有一些高层次的解释:

GlobalKTable
只有一个目的:在不修改主题的情况下读取数据,以允许执行
KStream GlobalKTable
-连接或通过“交互式查询”查询存储

因此,您不能真正做您想做的事情,因为无法按照您的意图将数据从全局存储复制到另一个存储。您需要复制输入主题并阅读两次:(1)作为
GlobalKTable
,(2)作为常规
KStream
,以便在将数据放入存储之前修改数据。对于(2),可以使用
transform()


希望这能有所帮助。

现在还不清楚你到底想达到什么目的。但是,有一些高层次的解释:

GlobalKTable
只有一个目的:在不修改主题的情况下读取数据,以允许执行
KStream GlobalKTable
-连接或通过“交互式查询”查询存储

因此,您不能真正做您想做的事情,因为无法按照您的意图将数据从全局存储复制到另一个存储。您需要复制输入主题并阅读两次:(1)作为
GlobalKTable
,(2)作为常规
KStream
,以便在将数据放入存储之前修改数据。对于(2),可以使用
transform()


希望这有帮助。

我请求您提供运行代码所需的导入;A.K.A.直接报价:完整–提供其他人在问题中重现您的问题所需的所有部分itself@FailingCoder谢谢你的评论,我会尝试这样做,问题是这个项目使用了我公司和其他依赖项的大量库,但我会尝试编辑它。如果你不理解代码,除非你这样做,否则它对你基本上是无用的。这是一个使用大量图书馆的项目;在创建一个简单的示例时,不要为了简洁而牺牲清晰度;A.K.A.直接报价:完整–提供其他人在问题中重现您的问题所需的所有部分itself@FailingCoder谢谢你的评论,我会尝试这样做,问题是这个项目使用了我公司和其他依赖项的大量库,但我会尝试编辑它。如果你不理解代码,除非你这样做,否则它对你基本上是无用的。这是一个使用大量图书馆的项目;在创建一个简单的示例时,不要为了简洁而牺牲清晰度。是的,我将使用这种方法,我正在考虑这个问题,但不确定,谢谢!是的,我将使用这种方法,我正在考虑这个问题,但不确定,谢谢!
       ...

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

    return builder;
}