我创建了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 }
提前致谢。