Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 卡夫卡在MeteredKeyValueStore中播放NPE流_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Apache kafka 卡夫卡在MeteredKeyValueStore中播放NPE流

Apache kafka 卡夫卡在MeteredKeyValueStore中播放NPE流,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我正在尝试使用Scala中的ProcessorAPI运行一个非常基本的流 class KafkaProcessor extends Processor[String, GenericRecord] { private var kvStore: KeyValueStore[String, GenericRecord] = _ override def init(processorContext: ProcessorContext): Unit = { this.k

我正在尝试使用Scala中的ProcessorAPI运行一个非常基本的流

class KafkaProcessor extends Processor[String, GenericRecord] {
    private var kvStore: KeyValueStore[String, GenericRecord] = _

    override def init(processorContext: ProcessorContext): Unit = {
        this.kvStore = Stores
            .keyValueStoreBuilder(
                Stores.persistentKeyValueStore("random-mame"),
                Serdes.String,
                new GenericAvroSerde
            )
    }

    override def process(
         key: String,
         value: GenericRecord
    ): Unit = {
        val currentState = Option(kvStore.get(key)) // NPE
        ...
    }
}
似乎从错误日志中抛出了一些内部NPE:

Exception in thread "test-4294024b-1390-4c2f-ba8e-e520cca728ff-StreamThread-1" java.lang.NullPointerException
at org.apache.kafka.streams.state.internals.MeteredKeyValueStore.get(MeteredKeyValueStore.java:134)
at writeside.kafka.AggregateKafkaProcessor.process(KafkaProcessor.scala:64)
at writeside.kafka.AggregateKafkaProcessor.process(KafkaProcessor.scala:35)
at org.apache.kafka.streams.processor.internals.ProcessorNode.process(ProcessorNode.java:115)
at org.apache.kafka.streams.processor.internals.ProcessorContextImpl.forward(ProcessorContextImpl.java:146)
at org.apache.kafka.streams.processor.internals.ProcessorContextImpl.forward(ProcessorContextImpl.java:129)
at org.apache.kafka.streams.processor.internals.ProcessorContextImpl.forward(ProcessorContextImpl.java:93)
at org.apache.kafka.streams.processor.internals.SourceNode.process(SourceNode.java:84)
at org.apache.kafka.streams.processor.internals.StreamTask.process(StreamTask.java:351)
at org.apache.kafka.streams.processor.internals.AssignedStreamsTasks.process(AssignedStreamsTasks.java:104)
at org.apache.kafka.streams.processor.internals.TaskManager.process(TaskManager.java:413)
at org.apache.kafka.streams.processor.internals.StreamThread.runOnce(StreamThread.java:862)
at org.apache.kafka.streams.processor.internals.StreamThread.runLoop(StreamThread.java:777)
at org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:747)

它与
MeteredKeyValueStore
内部的
getTime
相关。我不知道这是怎么发生的,我怎么能阻止它。

如果你想使用存储,你需要在处理器之外声明存储(即,将存储添加到
StreamBuilder
),将存储(通过
StreamsBuilder
)连接到处理器

在处理器中,您可以使用
ProcessorContext
获取存储的句柄

有关更多详细信息,请参阅文档: