Apache flink Flink CEP以前的所有事件在比赛中从状态中清除

Apache flink Flink CEP以前的所有事件在比赛中从状态中清除,apache-flink,flink-streaming,flink-cep,Apache Flink,Flink Streaming,Flink Cep,我在flink CEP有一个特别的例子,在一场比赛中所有的事件都被丢弃。例如,让我们举一个苹果输入的例子,所有的,灯泡,蜜蜂,贝尔。条件是单词以A开头,然后是单词以B开头。但是匹配只返回第一个匹配,并且跳过其余的匹配,因此只返回Apple Bulb,其他的将被丢弃。您应该尝试不同的选项和不同的匹配方式。例如,如果将AfterMatchSkipStrategy.noSkip()与followdbyany()结合使用,则将返回所有9个匹配项 数据流stringInputStream=environm

我在flink CEP有一个特别的例子,在一场比赛中所有的事件都被丢弃。例如,让我们举一个苹果输入的例子,所有的,灯泡,蜜蜂,贝尔。条件是单词以A开头,然后是单词以B开头。但是匹配只返回第一个匹配,并且跳过其余的匹配,因此只返回Apple Bulb,其他的将被丢弃。

您应该尝试不同的选项和不同的匹配方式。例如,如果将
AfterMatchSkipStrategy.noSkip()
followdbyany()
结合使用,则将返回所有9个匹配项

数据流stringInputStream=environment.fromElements( “苹果”、“和”、“全部”、“灯泡”、“蜜蜂”、“钟”); AfterMatchSkipStrategy skipStrategy=AfterMatchSkipStrategy.noSkip(); 模式模式=模式。开始(“开始”,跳过策略) .where(新的SimpleCondition(){ @凌驾 公共布尔筛选器(字符串s)引发异常{ 返回(s.charAt(0)=“a”); } }).followerdbyany(“下一个”) .where(新的SimpleCondition(){ @凌驾 公共布尔筛选器(字符串s)引发异常{ 返回(s.charAt(0)='b'); } }); PatternStream PatternStream=CEP.pattern(stringInputStream,pattern); 数据流结果=patternStream.process( 新的PatternProcessFunction(){ @凌驾 公共无效进程匹配( 地图, 语境, 收集器输出)抛出异常{ out.collect(map.toString()); } }); result.print();
然而,你需要小心。设置需要无限期存储事件的模式将导致性能低下,并最终导致作业失败。您希望尽可能多地限制匹配。

您好,我的要求是唯一地匹配它们,就像我们首先匹配apple、bulb一样。接下来剩下的元素是all,and,bee,bell,所以我们匹配all和bee。最后我们把剩下的和贝尔配对。这是否可能使用CEP。我已经撤回了我的更新--它没有正确地满足您的要求。对于这个用例,我将使用ProcessFunction而不是CEP。
{start=[apple], next=[bulb]}
{start=[and], next=[bulb]}
{start=[all], next=[bulb]}
{start=[apple], next=[bee]}
{start=[and], next=[bee]}
{start=[all], next=[bee]}
{start=[apple], next=[bell]}
{start=[and], next=[bell]}
{start=[all], next=[bell]}