Apache flink 检查点时发出CEP。”;找不到条目的id“;

Apache flink 检查点时发出CEP。”;找不到条目的id“;,apache-flink,complex-event-processing,Apache Flink,Complex Event Processing,在简单CEP循环模式上启用检查点时 private Pattern<Tuple2<Integer, SimpleBinaryEvent>, ?> alertPattern = Pattern.<Tuple2<Integer, SimpleBinaryEvent>>begin("start").where(checkStatusOn) .followedBy("middle").where(checkStatusOn).times(

在简单CEP循环模式上启用检查点时

 private Pattern<Tuple2<Integer, SimpleBinaryEvent>, ?> alertPattern = Pattern.<Tuple2<Integer, SimpleBinaryEvent>>begin("start").where(checkStatusOn)
        .followedBy("middle").where(checkStatusOn).times(2)
        .next("end").where(checkStatusOn).within(Time.minutes(5))
}

故障原因:

Caused by: java.lang.Exception: Could not materialize checkpoint 2 for operator KeyedCEPPatternOperator -> Map (1/1).
... 6 more
Caused by: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Could not find id for entry: SharedBufferEntry(ValueTimeWrapper((1,SimpleBinaryEvent{id='1', status=true, sequence=95, time=1505503380000}), 1505503380000, 0),....
我确信我已经按照应该的方式实现了equals()和hashCode()。我也尝试过Objects.hashCode。在其他情况下,我在SharedBuffer.toString()上有循环引用(因此也有stackOverflow),这再次指向引用的问题(相等和不相等)。如果没有打开检查点,它将按预期工作。我正在本地群集上运行。CEP生产准备好了吗


我正在使用1.3.2 Flink

非常感谢您试用该库并报告此内容

随着越来越多的功能被添加到该库中,该库正在积极开发中。1.3是该库的第一个版本,具有如此丰富的语义,因此我们希望看到1)人们如何使用它,2)是否存在任何bug。所以我想说,它不是100%的生产准备,但它是不远的

现在,对于手头的问题,我想您正在使用RocksDB进行检查点设置,对吗?我假设的原因是,对于RocksDB,在每个水印(事件时间)中,您反序列化必要的状态(例如,
NFA
),处理一些事件,然后在将其放回RocksDB之前再次序列化

文件系统状态后端的情况并非如此,在这种情况下,您仅在检查点设置时序列化状态,并仅在恢复时读取和反序列化状态。因此,在本例中,假设您说过,没有检查点,您的工作就可以正常工作,只有在从失败中恢复后,您才会看到这个问题

问题的根源可能是
equals()
/
hashcode()
存在错误(情况似乎并非如此),或者在序列化/反序列化CEP状态的方式上存在问题

您是否也可以提供一个最小的事件输入序列来产生这种情况?为了重现问题,这将非常有帮助

非常感谢,
Kostas

非常感谢您试用该库并报告此内容

随着越来越多的功能被添加到该库中,该库正在积极开发中。1.3是该库的第一个版本,具有如此丰富的语义,因此我们希望看到1)人们如何使用它,2)是否存在任何bug。所以我想说,它不是100%的生产准备,但它是不远的

现在,对于手头的问题,我想您正在使用RocksDB进行检查点设置,对吗?我假设的原因是,对于RocksDB,在每个水印(事件时间)中,您反序列化必要的状态(例如,
NFA
),处理一些事件,然后在将其放回RocksDB之前再次序列化

文件系统状态后端的情况并非如此,在这种情况下,您仅在检查点设置时序列化状态,并仅在恢复时读取和反序列化状态。因此,在本例中,假设您说过,没有检查点,您的工作就可以正常工作,只有在从失败中恢复后,您才会看到这个问题

问题的根源可能是
equals()
/
hashcode()
存在错误(情况似乎并非如此),或者在序列化/反序列化CEP状态的方式上存在问题

您是否也可以提供一个最小的事件输入序列来产生这种情况?为了重现问题,这将非常有帮助

非常感谢,
Kostas

它看起来非常类似,如果需要,我可以从一个独立的junit中复制,这就是我创建它的方式。如果你可以发布一个带有独立junit的JIRA,那就太好了。然后我会看一看。如果需要的话,它看起来非常类似于我可以从一个自给自足的junit中复制,这就是我创建它的方式。如果你可以发布一个带有自给自足junit的JIRA,那就太好了。我将在本地模式下作为junit运行,就像在LocalFlinkMiniCluster(config,false)中一样。将准备好测试并提交。我在本地模式下作为junit运行,就像在LocalFlinkMiniCluster(配置,false)中一样。将准备好测试并提交。被其他事情搞砸了。
Caused by: java.lang.Exception: Could not materialize checkpoint 2 for operator KeyedCEPPatternOperator -> Map (1/1).
... 6 more
Caused by: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Could not find id for entry: SharedBufferEntry(ValueTimeWrapper((1,SimpleBinaryEvent{id='1', status=true, sequence=95, time=1505503380000}), 1505503380000, 0),....