ES的写操作流程

1:集群会任意挑选一个节点,就做协调节点,协调节点会hash数据,计算出当前数据的对应shard
2:协调节点会将数据路由到该shard的primary shard ,写入数据
3:primary shard 会同步数据到该shard的replica shard
4:全部写完,协调节点会通知客户端,写入完成

	详细流程:
	1:写入内存buffer中,同时写入translog日志(保证节点所在机器宕机,当前进程的数据不会丢失)
	2:如果buffer快满了,或者到一定的时间,就会将buffer中的数据refresh到一个磁盘中的os cache中,每隔1秒,把buffer中的数据refresh到磁盘中的os cache中。
	   只要数据refresh到os cache,那么客户端就可以查询到数据。
	   只要数据被refresh到os cache中,buffer中的数据就会被清空。
	3:ES一直重复写入数据,buffer会每隔一秒清空,但是translog日志是一直增加,逐渐增大的,到一定程度,就会执行commit操作。
	   commit操作的步骤: 1:写commit point (用于标识当前commit对应的多个segment file)
						  2:将os cache数据fsync强刷到磁盘中去(一个一个的segment file文件中)
						  3:清空translog日志文件
	    commit执行条件: 1:每隔30分钟
	    				 2:手动commit

问题1:ES为什么是准实时的?
ES数据是每隔一秒把数据从buffer中refresh到segment file中(首先会先进入os cache中),默认一秒,所以是准实时的,当然也可以自己手动refresh。

问题2:translog日志的作用?
因为os cache 和 buffer都是内存文件,一旦存储当前数据的节点所在机器宕机,那么数据就会丢失,translog日志是持久化到机器上,可以用于后面的数据恢复。

问题3:ES会存在5秒的数据丢失,为什么?
因为数据被写入translog日志并不是直接写入translog日志,而是先写入os cache中,然后每隔5秒刷到磁盘中。中间有5秒的数据是存在内存中的。

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值