我们目前正在测试siddhi wso2 cep。
我们需要能够重新启动wso2服务器进程而不会丢失已在窗口中累积的数据(例如时间窗口)。
有没有办法让时间窗保持持久,以便服务器可以在不失去状态的情况下重新启动?
我们是否必须将服务器配置为使用持久性?
或者我们只需要调整查询并使用事件表吗?
这是我们的查询示例:
from every data= DataInStream[state == 1] ->
every event = EventInStream[event.no == data.no] within 24h
insert into duplicatesOutStream data.id as id
答案 0 :(得分:4)
您可以通过启用快照使CEP保持其状态。文档可以是found here。但请注意,这将“定期”持续CEP的“整个状态”(可在几分钟内配置)。由于这只是定期完成,因此您可能会丢失在上次快照操作后到达的最新几个事件。如果你想让cep在崩溃后恢复,这是最简单的选择。
除此之外,没有其他方法可以使预定义窗口持久化。但是如果你愿意,你可以编写一个自己的自定义时间窗口(documentation),它将执行持久性并将其插入CEP。
您也可以使用事件表。使用事件表时,可以确保所有到达的事件都是持久的。 (但是这种方法的一个缺点是,与Windows +快照方法相比,这可能是性能损失。)