关于某次查询es中数据,发现查询条件不变,但是数据的总计却一直在动态变化???

本质原因:es的数据写入,主分片和副本分片数据一致性问题。

 

具体原因:由于项目中所搭建的es集群环境,使用了3个节点,然后我们考虑数据的大小,目前才100W条数据,然后我们考虑es读写的高可用,设计了1个主分片和对应2个副本分片,但是发现到生产环境,我们的配置注解并没有生效,或者说被DBA给手动改了。

@Document(indexName = "xxxxxxx", type = "xxxxxx", shards = 1, replicas = 2)

默认成了5个分片,对应1个副本分片。

 

 

由于es集群的主分片和副本分片的同步机制,导数性能写入较慢。然后我们有一个需求就是将mongodb的数据全部同步到es对应的索引中。我们的操作是先将es中的数据deleteAll,然后每次读取mongodb中10000条数据,不断轮询save到es中。然而deleteall操作和写入操作是单线程进行的。导致可能在主节点merge到副本节点中的时候,出了异常情况(如果主副是异步操作)。导致主节点的数据是全部成功了。然而副本节点中数据都是缺胳膊多腿的。

然而我们的es集群配置又是随机路由节点(包括副本节点)进行读操作。导致你会茫然的发现。查询条件一致。但是每次查询出的结果总计却在上下波动。。。。。。。。。。。。。

 

解决方案:

1.网上所说:先删除所有的副本节点。置为0。再同步数据到es。然后再将副本节点的数据置为1。

2.我们对应业务解决方案:将deleteAll操作和save操作分开执行。

posted @ 2020-01-14 08:49  CHANGEMAX  阅读(727)  评论(0编辑  收藏  举报