我有一个部署有3个节点的Hazelcast Jet
集群,几乎没有读写Redis Streams
的作业。
到目前为止,Redis
的流可以从特定位置读取,也可以从开始的位置或较新的位置读取。如果作业由于某种原因(错误)而重新启动,则必须从其离开的地方开始。
此外,我如何编码或配置我的作业,使其能够重新尝试处理失败的消息,例如在处理过程中发生了某些运行时异常,网络与其他Web服务或Redis群集断开连接。
答案 0 :(得分:1)
您可以通过JobConfig
JobConfig config = new JobConfig();
config.setProcessingGuarantee(EXACTLY_ONCE)
.setSnapshotIntervalMillis(3000);
Job job = instance.newJob(p, config);
这将配置作业,以便每3秒拍摄一次快照。如果您的作业重新启动,则可能是由于Jet群集的缩小/放大或手动调用job.restart()
导致的,源将从上次保存的快照继续。一些消息可以发出两次,接收器应处理该重复。
我们将lettuce
客户端用于RedisSource
,您可以通过RedisUri
配置超时,如果断开连接,则lettuce客户端将尝试重新连接。但是处理填充过程中的任何失败都会使作业失败。