当前位置: 首页 > 知识库问答 >
问题:

多种事件类型的Apache Flink CEP模式

黎震博
2023-03-14

目前我正在做一个学期项目,我必须认识三个事件的系列。像P-

我们有两种不同的事件类型,它们通过同一主题中的Kafka连接器使用。

我创建了一个名为Event的父类,其他两种类型都是从该类派生的。

Kafka连接器使用EventSchema将JSON反序列化为父类Event。

val consumer = new FlinkKafkaConsumer("events", new EventSchema, properties)
val stream = env.addSource(consumer)

模式如下所示:

val pattern = Pattern
  .begin[Event]("before")
  .subtype(classOf[Position])
  .next("recognized")
  .subtype(classOf[Recognized])
  .next("after")
  .subtype(classOf[Position])

当前的问题是,如果我发送三条具有适当格式的消息,该模式将无法识别。

我还试过什么。。我改变了模式如下:

val pattern = Pattern
  .begin[Event]("before")
  .where(e => e.getType == "position")
  .next("recognized")
  .where(e => e.getType == "recognition")
  .next("after")
  .where(e => e.getType == "position")

这种模式有效,但后来我无法将Event类转换为位置或识别...

我错过了什么?


共有1个答案

阎涵忍
2023-03-14

根据注释,我认为应该返回子类型实例,而不是事件。以下是我为您提供的示例代码:

val event = mapper.readValue(bytes, classOf[Event])
event.getType match {
  case "position" => mapper.readValue(bytes, classOf[Position])
  case "recognition" => mapper.readValue(bytes, classOf[Recognized])
  case _ =>
}

我在CEPITCase的一个测试用例中成功地尝试了这个示例。JAVA

DataStream<Event> input = env.fromElements(
  new Event(1, "foo", 4.0),
  new SubEvent(2, "foo", 4.0, 1.0),
  new SubEvent(3, "foo", 4.0, 1.0),
  new SubEvent(4, "foo", 4.0, 1.0),
  new Event(5, "middle", 5.0)
);

Pattern<Event, ?> pattern = Pattern.<Event>begin("start").subtype(SubEvent.class)
.followedByAny("middle").subtype(SubEvent.class)
.followedByAny("end").subtype(SubEvent.class);
 类似资料:
  • 我有一个从提取的代码,对于多个子类来说,这个代码看起来应该完全相同,所以我尽量避免重复。但是,实际上(见下文),scala认为是一个泛型的,返回的值类型为,当然,它没有和方法。 问题是在这里避免重复的适当方法是什么?我对将转换为字符串并不那么着迷,因为这段代码可以使用刚从字符串解析为AST的json。我开始考虑为我需要的三种类型编写包装器,并将这些类型的匹配和隐式转换器转换为包装器,然后为这些包装

  • 1. 什么是事件模型? “百度分析云”基于“user-event”的数据模型。 您可以简单理解为两张大表,一张记录人的属性,一张记录人的行为。两张表通过唯一ID进行关联。 在event表,即事件表里,每一条用户行为就是一条记录。 2. 事件模型相比于传统PV模型的优势? 传统的流量分析工具会以“PV(页面浏览量)”为核心,去衡量产品的价值。而随着流量红利的消退,以及线上线下日趋融合,PV指标已经不

  • 监听函数 浏览器的事件模型,就是通过监听函数(listener)对事件做出反应。事件发生后,浏览器监听到了这个事件,就会执行对应的监听函数。这是事件驱动编程模式(event-driven)的主要编程方式。 JavaScript 有三种方法,可以为事件绑定监听函数。 HTML 的 on- 属性 HTML 语言允许在元素的属性中,直接定义某些事件的监听代码。 <body onload="doSomet

  • 模型事件实现 psr/event-dispatcher 接口,默认由 hyperf/event 组件提供功能支持。 运行事件 在 ORM 的运行期间,会对应触发以下事件,您可以进行对这些事件进行监听以满足您的需求。 事件 描述 Hyperf\Database\Events\QueryExecuted Query 语句执行后 Hyperf\Database\Events\StatementPrepa

  • 事件监听分两种,一种是仅限于对象的事件,另一种是静态方法触发的事件。 监听方式分两种:1、在类里写监听代码;2、定义监听类 批量操作的事件监听,一般建议用监听类方式。对象的事件监听根据习惯选择即可。 事件列表 模型对象事件 事件名 常量 描述 BeforeInsert ModelEvents::BEFORE_INSERT 插入前,insert()/save()触发 AfterInsert Mode

  • 模型事件 模型事件是指在进行模型的写入操作的时候触发的操作行为,包括模型的save方法和delete方法。 模型事件只在调用模型的方法生效,使用查询构造器操作是无效的 模型支持如下事件: 事件 描述 快捷方法 before_insert 新增前 beforeInsert after_insert 新增后 afterInsert before_update 更新前 beforeUpdate afte