如何读取从不同处理器更新的处理器中的kafka statestore?

时间:2018-01-24 12:13:27

标签: apache-kafka kafka-consumer-api kafka-producer-api apache-kafka-streams apache-kafka-connect

我创建了2个kafka州商店,对应2个不同的主题,如下所示。

    StateStoreSupplier tempStore1 = Stores.create("tempStore1").withKeys(Serdes.String()).withValues(valueSerde).persistent().build();

    StateStoreSupplier tempStore2 = Stores.create("tempStore2").withKeys(Serdes.String()).withValues(valueSerde).persistent().build();


    streamsBuilder.addSource("Source", "tempTopic1", "tempTopic2")
                    .addProcessor("Process", () -> new Processor(), "Source")
                    .connectProcessorAndStateStores("Process", "tempStore1", "tempStore2")
                    .addStateStore(tempStore1, "Process")
                    .addStateStore(tempStore2, "Process");

在Processor类中,当相应主题中有消息时,我能够读取并向StatesStores添加记录。但是当有来自tempTopic2和副verca的消息时,我无法读取商店tempStore1。 我必须比较从一个statestore到另一个statestore的消息,这意味着我需要读取两个状态存储。

以下是流程方法的示例代码段。我相信ProcessorContext(上下文变量)对于各个主题是不同的,因此其他商店是不可访问的。

    tempKeyValueStore1 = (KeyValueStore) context.getStateStore("tempStore1");
            tempKeyValueStore2 = (KeyValueStore) context.getStateStore("tempStore2");
            if(context.topic().equals("tempTopic1"))
            {
                tempKeyValueStore1.put(value.getHeader().getCorrelationId(), value);
            }else if(context.topic().equals("tempTopic2"))
            {
                tempKeyValueStore2.put(value.getHeader().getCorrelationId(), value);
                System.out.println("Size: "+tempKeyValueStore1.approximateNumEntries()); // returning as 0 although there records in that statestore
            }

提前致谢。

0 个答案:

没有答案