Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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 flink Flink模式在警报代码中遇到Arralist问题?_Apache Flink_Flink Streaming_Flink Cep - Fatal编程技术网

Apache flink Flink模式在警报代码中遇到Arralist问题?

Apache flink Flink模式在警报代码中遇到Arralist问题?,apache-flink,flink-streaming,flink-cep,Apache Flink,Flink Streaming,Flink Cep,我遵循并使用kafka json实现了相同的示例数据 消费者样本数据{温度:28,机器名称:xyz} 原因:java.lang.ClassCastException:java.util.ArrayList无法转换为Test.TemperatureEvent 在Test.KafkaApp$2.flatSelectKafkaApp.java:53 位于org.apache.flink.cep.operator.FlatSelectCepOperator.processMatchedSequences

我遵循并使用kafka json实现了相同的示例数据

消费者样本数据{温度:28,机器名称:xyz}


原因:java.lang.ClassCastException:java.util.ArrayList无法转换为Test.TemperatureEvent 在Test.KafkaApp$2.flatSelectKafkaApp.java:53 位于org.apache.flink.cep.operator.FlatSelectCepOperator.processMatchedSequencesFlatSelectCepOperator.java:66 位于org.apache.flink.cep.operator.AbstractKeyedCEPPatternOperator.processEventAbstractKeyedCEPPatternOperator.java:382 位于org.apache.flink.cep.operator.AbstractKeyedCEPPatternOperator.ProcessElement AbstractKeyedCEPPatternOperator.java:198 位于org.apache.flink.streaming.runtime.io.StreamInputProcessor.processInputStreamInputProcessor.java:202 位于org.apache.flink.streaming.runtime.tasks.OneInputStreamTask.runOneInputStreamTask.java:105 位于org.apache.flink.streaming.runtime.tasks.StreamTask.invokeStreamTask.java:300 位于org.apache.flink.runtime.taskmanager.Task.runTask.java:704
在java.lang.Thread.runUnknown Source上,您的代码包含两个问题:

首先,flatSelect接收地图。这意味着每个模式可能有多个TemperatureEvents。因此,你必须选择你想要的。 您不会向收集器添加任何警报。平面映射函数不返回值,而是通过收集器输出值 如果不进行编译,我认为这应该可以解决问题

DataStream<Alert> patternStream = CEP.pattern(inputEventStream, warningPattern)
    .flatSelect(
    new PatternFlatSelectFunction<TemperatureEvent, Alert>() {
            private static final long serialVersionUID = 1L;

        @Override
        public void flatSelect(Map<String, List<TemperatureEvent>> event, Collector<Alert> out) throws Exception {
            TemperatureEvent temperatureEvent = event.get("first").get(0);
            out.collect(new Alert("Temperature Rise Detected:" + temperatureEvent.getTemperature() + " on machine name:" + temperatureEvent.getMachineName()));
        }
       });

顺便说一下,来自O'Reilly存储库的链接代码不会使用Flink编译。PatternSelectFunction的签名错误。

能否显示inputStream的代码?DataStream inputEventStream=env.addSource new FlinkKafkaConsumerdemo,new EventDeserializationSchema,properties;但是它与强制转换有关的问题是:java.lang.ClassCastException:java.util.ArrayList不能强制转换为Test.TemperatureEvent at Test.KafkaApp$2.flatSelectKafkaApp.java:53 at org.apache.flink.cep.operator.FlatSelectCepOperator.processMatchedSequencesFlatSelectCepOperator.java:66 atorg.apache.flink.cep.operator.AbstractKeyedCEPPatternOperator.processEventAbstractKeyedCEPPatternOperator.java:382位于org.apache.flink.cep.operator.AbsI没有在我的代码中执行强制转换。您尝试了哪些代码?DataStream patternStream=CEP.patterninputEventStream,warningPattern.selectnew PatternSelectFunction{private static final long serialVersionUID=1L;公共警报selectMap事件引发异常{返回检测到的新警报温升:+TemperatureEvent.getfirst.getTemperature+on machine name:+MonitoringEvent.getfirst.getMachineName;}正如我在上面所写的,PatternSelectFunctionselect的签名是Alert selectMap
Exception in thread "main" org.apache.flink.runtime.client.JobExecutionException: Job execution failed.
at org.apache.flink.runtime.jobmaster.JobResult.toJobExecutionResult(JobResult.java:146)
at org.apache.flink.runtime.minicluster.MiniCluster.executeJobBlocking(MiniCluster.java:647)
at org.apache.flink.streaming.api.environment.LocalStreamEnvironment.execute(LocalStreamEnvironment.java:123)
at Test.KafkaApp.main(KafkaApp.java:61)
DataStream<Alert> patternStream = CEP.pattern(inputEventStream, warningPattern)
    .flatSelect(
    new PatternFlatSelectFunction<TemperatureEvent, Alert>() {
            private static final long serialVersionUID = 1L;

        @Override
        public void flatSelect(Map<String, List<TemperatureEvent>> event, Collector<Alert> out) throws Exception {
            TemperatureEvent temperatureEvent = event.get("first").get(0);
            out.collect(new Alert("Temperature Rise Detected:" + temperatureEvent.getTemperature() + " on machine name:" + temperatureEvent.getMachineName()));
        }
       });