我正在处理流口水和火花流。我想在Spark Streaming上下文中的整个工作中维护KieSession。每个工作节点的每次会话都在执行spark。我知道,插入事实是查询事实的基础。根据我的理解,会话实际上是建立网状网络并将事实插入到alpha和beta内存中的会话。因此,我的想法是为整个工作中的每个工作名称创建一个每个kiesession,以便在kiesession中保持状态。但是我无法播放kiesession,因为它没有序列化。是否有其他方法可以为Spark Streaming上下文中的每个工作节点仅实现一个有状态会话(KieSession)。

最佳答案

您可以使用org.kie.api.marshalling.Marshaller编组/解组KieSession,这是org.kie.internal.marshalling.MarshallerFactory的javadoc


MarshallerFactory用于封送和取消封送StatefulKnowledgeSessions。最简单的方法如下:

// ksession is the StatefulKnowledgeSession
// kbase is the KnowledgeBase
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Marshaller marshaller = MarshallerFactory.newMarshaller( kbase );
marshaller.marshall( baos, ksession );
baos.close();

关于java - Drools Spark Streaming集成可实现有状态的连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45951395/

10-11 04:09