Apache Flink:如何使用跳过策略?

时间:2018-04-26 11:50:17

标签: apache-flink flink-streaming flink-cep

我希望在第一次模式匹配后跳过匹配的事件。

如何使用Flink的跳过策略?

我有一个简单的场景,如果 downloads > 1000 然后向用户发出警报。

在我的实施中,在第一场比赛之后,由于1000后的下载量增加,它会不断发出警报。

第一场比赛后如何跳过所有提醒?

我已阅读过跳过策略文档,但示例或实现对我有帮助。

1 个答案:

答案 0 :(得分:0)

CEP更适用于重复的模式,在这里实际上并不起作用。您所说的跳过策略实际上称为“赛后跳过策略”,这意味着您要匹配多个模式。

我认为更好的方法是使用流程函数,例如:

class AlertUserOnce extends ProcessFunction[element, element] {

  lazy val turnOff: ValueState[Boolean] = getRuntimeContext
     .getState(new ValueStateDescriptor[Boolean]("turn-function-off", classOf[Boolean]))


  override def processElement(value: element, ctx: Context, out: Collector[element]): Unit = {
   if (turnOff.value == null && element.downloads > 1000) {
     alertUser(value)
     turnOff.update(true)
    }
    out.collect(value)
  }
}

...

stream.keyBy(...).process(new AlertUserOnce)