Scala 如何为以下内容创建模式和警报

Scala 如何为以下内容创建模式和警报,scala,apache-kafka,sbt,apache-flink,Scala,Apache Kafka,Sbt,Apache Flink,我有这个代码,它给出了locationID和temp,我想要一个模式,每当temp>THRESHOLD\u温度 我试过:- val pattern1: Pattern[Event,_] = Pattern.begin[Event]("first") .subtype(Event.getClass) .where( (evt -> evt.getTemp()) >= TEMPERATURE_THRESHOLD)

我有这个代码,它给出了locationID和temp,我想要一个模式,每当temp>THRESHOLD\u温度

我试过:-

        val pattern1: Pattern[Event,_] = Pattern.begin[Event]("first")
          .subtype(Event.getClass)
          .where( (evt -> evt.getTemp()) >= TEMPERATURE_THRESHOLD)
          .within(Time.seconds(5))

        val patternStream: PatternStream[Event] = CEP.pattern(f,pattern1)
       val alerts: DataStream[String] = patternStream.flatSelect(
          (in: Map[String,String], out: Collector[String]) => {
            var first: String = in.get("first")
            if (first >= TEMPERATURE_THRESHOLD){

               out.collect("Temperature above danger zone")
           }
          }
        )
这是要发出警报的代码:-

case class Event(locationID: String, temp: Double)

    val TEMPERATURE_THRESHOLD: Double = 50.00

    val see: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

    val properties = new Properties()
    properties.setProperty("zookeeper.connect", "localhost:2181")
    properties.setProperty("bootstrap.servers", "localhost:9092")


    val src = see.addSource(new FlinkKafkaConsumer010[ObjectNode]("broadcast",
      new JSONKeyValueDeserializationSchema(false), properties))


    var ask = src.map{
      r => r.get("value")
      }


    var data = ask.map { v => {
      val loc = v.get("locationID").asInstanceOf[String]
      val temperature = v.get("temp").asDouble()

      (loc, temperature)
    }}
//    data.print()

    var f = data.keyBy(
        v => v._2
      )

    f.print()
    see.execute()

模式正在过载,而且flatSelect用于检测事件序列中的模式,这并不真正适合这个特定问题。查找temp>阈值不需要模式匹配的事件——一个简单的过滤器或flatmap就可以完成这项工作。例如,您可以有一个平面图,用于将温度过高的每个事件转换为警报,并忽略所有其他事件

至于你基于CEP的解决方案,我不明白你说的是它出了什么问题。但有几件事看起来不对劲。
内的
子句不会做任何事情:因为您的模式只有一个事件长,所以它们没有任何持续时间。你通过温度来输入数据流,这看起来很奇怪