es漏采集数据解决办法

背景:

使用search_after采集千万级数据

解决办法

使用search_after采集需要指定一个或多个sort字段,我的初步方案是用一个精度是毫秒的时间戳字段,经过测试后发现会漏采集数据,原因是毫秒级的时间戳在千万级的数据之下会出现多个doc时间戳相同的情况,在采集这些相同的doc时就会出现漏采集数据的现象,因为sort值是根据时间戳来排序的,但是时间戳在这种情景下并不是一个唯一意义的字段,因此不能用这个字段。第二个解决办法是使用_id作为sort字段,经过测试后发现这种方式确实不会丢数据,但是tps很低,只有1600,不满足采集需求。第三个解决办法是在数据中加一个严格递增的字段,经过测试后,这种办法可以有效解决漏采集和低tps的问题,但是在真实生产环境中,很难维护一个严格递增的字段,因此这种方式也不适合,最后去官方文档找到了目前这种解决办法,使用date_nanos类型的时间戳,这个类型的时间戳是es的一个纳秒级的时间戳,能够满足需求,经过测试,使用这种方式,在并行度为一的情况下采集的tps为11000左右。采集一千万条数据需要15分钟左右。如果加并行度的话,这个时间会更短,能够较好的解决当前问题。

注意点:

采集的es数据mapping如下,纳秒值时间戳必须要有format,否则会报错:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值