Ignite 的 Custom CacheStore 是否自动进行后写?

Does Custom CacheStore for Ignite automatically do write-behind?

我已经为 Ignite 实现了自定义 CacheStore 以与 Elastic Search 进行通信。现在,如果ElasticSearch服务器宕机一段时间,ES服务器启动后缓存中的数据是否会上传到ElasticSearch?

我认为既然你实现了一个自定义的CacheStore,那么你需要自己处理它。

同时您可以查看 Apache Ignite write-behind mechanism,它将在队列中累积更新并在需要时发送它们。理论上,如果您有足够的内存用于大型队列,那么它可以帮助您在 ElasticSearch 服务器停机期间幸存下来。但请记住,使用后写式 Ignite 不会提供一致性保证。

Does Custom CacheStore for Ignite automatically do write-behind?

没有。默认情况下禁用:https://apacheignite.readme.io/docs/3rd-party-store#section-configuration

setWriteBehindEnabled(boolean) | Sets flag indicating whether write-behind is enabled. | false

Now, if ElasticSearch server is down for some time, will the data in the cache be uploaded to Elastic Search once the ES server is up?

没有。 Ignite 不会再次发送该数据。文档中也有说明:

Performance vs. Consistency
Enabling write-behind caching increases performance by performing 
asynchronous updates, but this can lead to a potential drop in consistency as 
some updates could be lost due to node failures or crashes.

有一种write-behind模式,一旦条目写入Ignite,就不会将条目写入缓存存储,而是将它们推迟一段时间,然后批量写入累积的条目。当后写队列大小达到 CacheConfiguration#writeBehindFlushSize 时,进一步的操作将被阻止,直到队列被刷新。如果底层数据库在一段时间内不可用,则将重试写入操作,直到成功。

后写文档:https://apacheignite.readme.io/docs/3rd-party-store#section-write-behind-caching

与此模式相反,有一种直写模式,它使所有操作在执行后都进入缓存存储。如果缓存存储无法保存条目,则回滚操作本身。

直写文档:https://apacheignite.readme.io/docs/3rd-party-store#section-read-through-and-write-through

如果您在 CacheConfiguration 中启用 writeBehind,Ignite 将自动添加 writeBehind 功能 到您的缓存存储。它将使用实现所有延迟和批处理功能的 GridCacheWriteBehindStore 包装您的缓存存储。

所以,如果您在配置中启用它,Ignite 将自动执行后写。