pyes问题记录(bulk操作)

背景:主机统计按每5分钟create一个进程进行统计最近24小时的日志,统计host数据,然后存在到host_all里面,在host_all里面主要记录host, create_time(首次发现host的时间), lastupdate_time(最后一次发现host的时间)

经过调试发现在主机统计中index或者update 文档时速度比较慢(每次提交差不多1-2秒才结束),导致统计在5分钟内未完成,导致多个进程同时进行主机统计,由于多个进程导致host_all中的host不唯一

目前主要修改
1.将统计结果在存储es时使用的index和update修改为bulk
2.在pyes进行matchall时,每次查询size为10,将其设置为1000

目前统计基本在20s左右完成

需要注意的是:
1.在使用bulk时,如果有update的内容,需要注意在调用flush_bulk(forced=True)方法时如果提交数据会发生异常,原因时,pyes会对提交返回的数据进行检查,而在检查结果中不支持update方法(见pyes.models 212行函数)
可以通过设置bulk对象的raise_on_bulk_item_failure为False,不进行结果检查
2.注意在创建pyes.ES也有raise_on_bulk_item_failure参数,在调用create_bulker是也使用该属性初始化bulk对象,但是有bug(见pyes.es 395行函数),返回值错误
3.设置pyes进行matchall的时使用pyes.search(pyes.Search(filter=pyes.MatchAllFilter(), bulk_read=1000), indices=index_name, doc_type=doc_type_name)

4.在index后可以返回document id,若需要时用该id做去重之类的工作,可以使用flush_bluk后返回的结果,注意flush_bluk可能返回None,如果提交数据行数未达到400行(可设置),也可以使用flush_bluk(True)强制提交数据到es,根据返回结果中的id,可通过mget获取提交的文档内容(注意需要在下次使用该数据之前强制更新数据到es)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,853评论 18 139
  • 欢迎访问我的博客查看原文:http://wangnan.tech 注:文本整理自《ELKstack权威指南》 目录...
    GhostStories阅读 10,493评论 0 7
  • 很少写技术博客,一是觉得自己技术有限,怕误人子弟;二是文笔较差,比较排斥写作之类的工作。话说不锻炼,哪会有进步呢,...
    奔跑的番茄酱阅读 42,387评论 7 132
  • 欢迎访问我的博客查看原文:http://wangnan.tech 注:文本整理自《ELKstack权威指南》 架构...
    GhostStories阅读 19,923评论 0 31
  • 1 “好事”与“回报”似乎是一对孪生兄弟,每当我们看到有好人好事一定会或多或少的想到回报这两个字……那做好...
    王艺璇wyx阅读 421评论 0 1