从kafka流中的被调用函数获取statestore数据

时间:2017-10-25 09:40:54

标签: apache-kafka apache-kafka-streams

在Kafka Streams'处理器API,我可以将处理器上下文从init()传递给其他函数,并使用process()中的状态存储获取上下文吗?

public void init(ProcessorContext context) {
    this.context = context;

    String resourceName = "config.properties"; 
    ClassLoader loader = Thread.currentThread().getContextClassLoader();
    Properties props = new Properties();
    try(InputStream resourceStream = loader.getResourceAsStream(resourceName)) {
        props.load(resourceStream);
    }
    catch(IOException e){
        e.printStackTrace();
    }

    dataSplitter.timerMessageSource(props, context);//can I pass context like this?

    this.context.schedule(1000);

    // retrieve the key-value store named "patient"
    kvStore = (KeyValueStore<String, PatientDataSummary>) this.context.getStateStore("patient"); 
    //want to get the value of statestore filled by the called function timerMessageSource(), as the data to be put in statestore is getting generated in timerMessageSource()
    //is there any way I can get that by using context or so    
}

1 个答案:

答案 0 :(得分:1)

ProcessorContext的使用有些限制,您不能在任意时间调用每个方法。因此,它取决于您如何使用它 - 通常,您可以根据需要传递它(在处理器的整个实时时间内它始终是相同的对象)。

如果我正确理解了您的问题,请注册标点符号并在标点符号回调中使用dataSplitter并想要修改商店。这绝对是可能的 - 您可以将商店放入类似于上下文的类成员中,也可以使用上下文对象将商店置于标点回调中。