栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Flink CEP 示例(可运行)

Flink CEP 示例(可运行)

package com.cep

import org.apache.flink.api.common.serialization.SimpleStringSchema
import org.apache.flink.cep.PatternSelectFunction
import org.apache.flink.cep.pattern.conditions.SimpleCondition
import org.apache.flink.cep.scala.pattern.Pattern
import org.apache.flink.cep.scala.{CEP, PatternStream}
import org.apache.flink.streaming.api.scala.KeyedStream
import org.apache.flink.streaming.api.scala.{StreamExecutionEnvironment, createTypeInformation}
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer

import java.util.Properties
import java.util

object Testcep {
  def main(args: Array[String]){
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    env.setParallelism(1)

    val initProps = new Properties()
    initProps.setProperty("bootstrap.servers", "cwh66:9092")
    initProps.setProperty("group.id", "test22")

    // 定义一个cep pattern模式。此处复杂的事务为:用户click后马上进行buy操作
    val pattern: Pattern[UserAction, UserAction] =
      Pattern.begin[UserAction]("start").where(new SimpleCondition[UserAction] {
        override def filter(t: UserAction): Boolean = t.action.trim.equals("click")
      })
        .next("middle").where(new SimpleCondition[UserAction] {
        override def filter(t: UserAction): Boolean = t.action.trim.equals("buy")
      })

    // 获取一个普通的流
    val input: KeyedStream[UserAction, String] = env.addSource(
      new FlinkKafkaConsumer[String]("test2", new SimpleStringSchema(), initProps))
      .map { line =>
        val strs: Array[String] = line.split(",")
        UserAction(strs(0), strs(1).toLong, strs(2), strs(3)) // 将记录转换为UserAction类型
      }.keyBy(_.name)

    // 将我们定义好的cep pattern应用于这个普通的流
    val patternStream: PatternStream[UserAction] = CEP.pattern(input, pattern).inProcessingTime() or inEventTime()
     //注意必须添加inProcessingTime() or inEventTime(),否则程序不能输出数据

    // 通过select算子获取符合pattern的事务数据,并打印结果
    val patternResult= patternStream.select(new PatternSelectFunction[UserAction, String] {
      override def select(map: util.Map[String, util.List[UserAction]]): String = {
        val click: UserAction = map.get("start").iterator().next()
        val buy: UserAction = map.get("middle").iterator().next()
        // 打印用户的名称,点击和购买的时间
        s"name: ${click.name}, click: ${click.timestamp}, buy: ${buy.timestamp}"
      }
    })

    patternResult.print()

    env.execute("click buy test")

  }


}
case class UserAction(ip: String, timestamp: Long,name: String,  action: String)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/745200.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号