Java 如何实现mapUsingContext()/filterUsingContext()-hazelcast jet

Java 如何实现mapUsingContext()/filterUsingContext()-hazelcast jet,java,hazelcast,hazelcast-jet,Java,Hazelcast,Hazelcast Jet,我有下面的场景来理解我的问题 有一个外部节点(节点A)、一个客户端应用程序(App1)和一个Hazelcast Jet作业应用程序(节点B,App2) App1从FlatBuffers收集数据,并将其包装在对象HzData中。HzData是可实现数据序列化的 然后HzData被放入一个IMAP中,作为IMAP称之为hzMap 首先,我启动节点A,然后启动App1。App1将hzMap存放在节点A中 然后,我运行App2,它依次启动node B并运行Jet作业 关于App2的一点信息,我在App

我有下面的场景来理解我的问题

  • 有一个外部节点(节点A)、一个客户端应用程序(App1)和一个Hazelcast Jet作业应用程序(节点B,App2)
  • App1从FlatBuffers收集数据,并将其包装在对象HzData中。HzData是可实现数据序列化的
  • 然后HzData被放入一个IMAP中,作为IMAP称之为hzMap
  • 首先,我启动节点A,然后启动App1。App1将hzMap存放在节点A中
  • 然后,我运行App2,它依次启动node B并运行Jet作业
  • 关于App2的一点信息,我在App2中有相同的HzData,其包名相同。我正在JobConfig中添加与作业相关的所有类
  • 然后,我的管道包含类似于此代码的内容
BatchSource-dataBatchSource=Sources.map('hzMap');
BatchStage dataBatchStage=pipe.drawFrom(dataBatchSource)。
mapUsingContext(ContextFactorys.replicatedMapContext
(‘hzMap’),
(映射,数据)->data.getValue();
dataBatchStage.drainTo(Sinks.logger())
上面的引文完美地记录了所有数据。如果我使用下面这样的过滤器,它会给我带来问题

dataBatchStage.filter(v->v.getCheck()==0).drainTo(Sinks.logger())

上面这句话让我犯了一个错误

com.hazelcast.jet.JetException:ProcessorTasklet{filter#24}中的异常:java.lang.ClassCastException:com.nexus.api.portables.HzData无法转换为com.nexus.api.portables.HzData

这个错误看起来像是反序列化错误,但我想知道上面的记录器是如何工作的

我也尝试过使用
FilterSingContext()
,但仍然得到了相同的结果


提前谢谢。期待您的宝贵反馈和解决方案。

该类似乎由两个不同的类加载器加载,也许?它是否在类路径上并且也随作业一起提交?我已经将这些类添加到JobConfig中,我相信它们是随作业一起提交的。此外,当使用相同的类加载器或不同的类加载器加载时,问题仍然存在。有趣的是,我的工作被设置为无限循环,过滤器似乎工作了近两次迭代(我可以在日志中看到它们),突然出现了这个异常。当我没有设置过滤器时,记录器可以很高兴地看到普通数据。如果您不将类添加到JobConfig,而是将它们放在类路径上,这种情况还会发生吗?Hi-Gencer,感谢您的支持。特定问题是由源中的垃圾数据引起的。另外,当支持类位于类路径中且类未添加到jobconfig时,我会得到异常。但是,现在通过将类添加到两个应用程序(App1和App2)的作业配置中,问题已经得到解决。