Apache flink 如何阻止Apache Flink CEP模式?

Apache flink 如何阻止Apache Flink CEP模式?,apache-flink,flink-streaming,flink-cep,Apache Flink,Flink Streaming,Flink Cep,请帮帮我,我有两个问题: 我阅读了ApacheKafka json消息(然后我有一些步骤:反序列化到POJO、filter、keyBy…) 使用KeyedProcessFunction(带状态、定时器、if-else逻辑块)或Flink CEP模式库哪个更好? 我可以在KeyedProcessFunction中检查输入序列(检查状态,如果其他模块阻塞,则检查out.collect(…)、state.clear()…您会理解我),还可以使用带有条件和量词的Flink CEP库 如何阻止flink

请帮帮我,我有两个问题:
我阅读了ApacheKafka json消息(然后我有一些步骤:反序列化到POJO、filter、keyBy…)

  • 使用KeyedProcessFunction(带状态、定时器、if-else逻辑块)或Flink CEP模式库哪个更好?
  • 我可以在KeyedProcessFunction中检查输入序列(检查状态,如果其他模块阻塞,则检查out.collect(…)、state.clear()…您会理解我),还可以使用带有条件和量词的Flink CEP库

  • 如何阻止flink CEP模式?
  • 例如:
    我有输入顺序:A1,(无事件1分钟)A2,(无事件5分钟)А3,(无事件1分钟)А4,(无事件超过5分钟)A5。(A1和A5之间可能有很多活动)
    我想发送输出:A1、A3、A5
    第一个事件,然后如果下一个事件发生在前一个事件之后不到5分钟内,它将不会发送到输出,如果下一个事件发生在前一个事件之后超过5分钟,它将发送到输出
    我应该在我的模式中添加什么

    Pattern<Event, ?> pattern = Pattern.
    <Event>begin("start")
    .where(new SimpleCondition<Event>(){
     public boolean filter(Event event){
    return event.getName().contains("A");
    }
    }).within(Time.minutes(5));
    
    Pattern=模式。
    开始(“开始”)
    .where(新的SimpleCondition(){
    公共布尔过滤器(事件){
    return event.getName()包含(“A”);
    }
    }).在(时间.分钟(5))内;
    
    乍一看,这个特定的示例作为
    KeyedProcessFunction
    实现起来似乎很简单,但如果消息到达的顺序不正确,肯定会产生一些复杂性。然后你可能会被愚弄,以为会有一个巨大的差距,而事实上并没有

    但是,如果您想要一个简单、现成的解决方案,那么这个特定的示例非常适合会话窗口


    有了CEP,我认为一个有效的解决方案会有这样的味道:您正在寻找一个a序列(称为A1),紧接着是另一个a序列(称为A2),其中(A2.timestamp-A1.timestamp)>=5分钟。找到匹配项后,发射A1并推进匹配引擎,使A2成为新的A1。(方便的是,CEP会对输入流进行预排序,这样您就不必担心出现问题了。)

    谢谢David,我会试试的。哦。。。我理解你的想法,但我必须做到:A1应该立即用卡夫卡发送(这是整个问题),如果A2.timestamp>=A1.timestamp+5分钟,A2应该用卡夫卡发送。我尝试使用迭代条件,但没有成功。我无法定义模式。在这项工作中,我使用了过程函数。