各位好,
我发现 FlinkCEP 中涉及 GroupPattern 的一些查询的匹配结果和直觉不太符合。
以如下查询为例:
Pattern.<Event>begin("pl").where(
new SimpleCondition<Event>() {
@Override
public boolean filter(Event value) {
return value.getName() == 2;
}
}
).times(1,3).optional().consecutive()
当输入数据流(格式为 e(id,name,price))为
e(1,1,0), e(2,2,5), e(3,1,0), e(4,2,2), e(5,1,0), e(6,3,2), e(7,1,0), e(8,2,5),
e(9,1,8)
时,其输出的匹配有三个,分别为:
pl: e(2,2,5)
pl: e(4,2,2)
p: e(8,2,5)
但是如果在查询外面加一个 GroupPattern,即查询为
Pattern.begin(
Pattern.<Event>begin("pl").where(
new SimpleCondition<Event>() {
@Override
public boolean filter(Event value) {
return value.getName() == 2;
}
}
).times(1,3).optional().consecutive()
)
时,输出的匹配结果却是一个匹配,具体为:
pl: e(2,2,5), e(4,2,2), e(8,2,5)
我们认为这样的结果不太符合直觉。
直觉上来说,一个 pattern sequence 外面套一层 group,匹配结果应该是一样的,为何会出现这样的结果?
而且后者的结果看起来和文档里说明的也不太正确,明明加了 `consecutive()` 却返回了不连续的事件。
请问这样的情况是有 bug 还是有意为之?如果是后者是有什么考量吗?
谢谢!
Flink version: 1.14.5
Java version: 11.0.15
flink-cep_2.11: 1.14.2
傅宣登,
中国科学院软件研究所
[email protected]