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 Kafka Streams-Forward记录在init()中_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Apache kafka Kafka Streams-Forward记录在init()中

Apache kafka Kafka Streams-Forward记录在init()中,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,在自定义转换器中,我们尝试在init中创建和转发一些记录。。方法根据该报告,这应该是可能的。但是,这不起作用,我们得到以下例外情况: Exception in thread "my-app-0.0.16-3be1aa47-d51d-4b0c-821a-a0b850359490-StreamThread-1" org.apache.kafka.streams.errors.StreamsException: failed to initialize processor KSTREAM-TRANSF

在自定义转换器中,我们尝试在init中创建和转发一些记录。。方法根据该报告,这应该是可能的。但是,这不起作用,我们得到以下例外情况:

Exception in thread "my-app-0.0.16-3be1aa47-d51d-4b0c-821a-a0b850359490-StreamThread-1" org.apache.kafka.streams.errors.StreamsException: failed to initialize processor KSTREAM-TRANSFORM-0000000004
at org.apache.kafka.streams.processor.internals.ProcessorNode.init(ProcessorNode.java:95)
at org.apache.kafka.streams.processor.internals.StreamTask.initTopology(StreamTask.java:517)
at org.apache.kafka.streams.processor.internals.StreamTask.initializeTopology(StreamTask.java:267)
at org.apache.kafka.streams.processor.internals.AssignedTasks.transitionToRunning(AssignedTasks.java:253)
at org.apache.kafka.streams.processor.internals.AssignedTasks.initializeNewTasks(AssignedTasks.java:79)
at org.apache.kafka.streams.processor.internals.TaskManager.updateNewAndRestoringTasks(TaskManager.java:318)
at org.apache.kafka.streams.processor.internals.StreamThread.runOnce(StreamThread.java:839)
at org.apache.kafka.streams.processor.internals.StreamThread.runLoop(StreamThread.java:777)
at org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:747)
Caused by: java.lang.NullPointerException
at org.apache.kafka.streams.kstream.internals.KStreamFilter$KStreamFilterProcessor.process(KStreamFilter.java:43)
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)

我是不是弄错了JavaDoc,根本不可能从init发出记录?

我想,您误解了。根据定义,将输入流的每个记录转换为输出流中的零个或多个记录

在转换器中,状态通过ProcessorContext获得。处理器接口具有init方法。init方法传入ProcessorContext实例,该实例提供对当前处理记录元数据的访问,包括其源Kafka主题和分区、相应的消息偏移量、,以及进一步的资料

现在我们可以使用init方法访问上下文,然后我们可以从上下文中调用方法,但不能在init方法内部调用


你可以看到这个例子。希望对您有用。

谢谢您的回答。我理解这一点,并且我还转发了转换中使用的记录。。方法但是,您提到的JavaDoc还指出,通过标点符号。标点符号可以观察处理进度,并执行其他定期操作。因此,如果可以在init方法中使用标点符号或实例化来转发记录,我不理解为什么不能直接从init方法转发记录,JavaDoc中的示例包含init方法的注释://可以通过该方法发出所需的任意多个新键值对。contextforward@Sörenhening注释//可以通过this.contextforward在注册标点器内发出所需的任意多个新键值对。注意,这是两行注释,第一行://每1000ms加一个标点;可以访问this.state只要init正在运行,Kafka Streams仍处于启动阶段,尚未准备好处理数据-这就是为什么您无法在init内转发数据。感谢澄清@MatthiasJ.Sax,事实上,我误解了文档。因此,为了在处理开始时发出一次某些记录,安排一个持续时间为1ms的标点器,然后在第一次调用后取消它是否有意义?