高查询和高吞吐量

过滤器缓存

过滤器缓存负责存查询中使用到的过滤器。

Elasticsearch包含两种类型的过滤器缓存:节点过滤去缓存(默认)和索引过滤器缓存

节点过滤器缓存被分配在节点上的所有索引共享,可以配置成使用特定大小的内存,或分配给Elasticsearch总内存的百分比。属性是indices.cache.filter.size。

索引过滤器缓存基于索引级别,一般来说,应该使用节点级别的过滤器缓存,因为很难预测每个索引最终缓存大小,通常也不知道最终节点会有多少索引。

字段数据缓存和断路器

字段数据缓存是Elasticsearch缓存的一部分,主要用于当查询对字段执行排序或切面时。构建字段数据缓存是昂贵的。

允许用于字段数据缓存的内存大小用indices.fielddata.cache.size属性来控制。这些值是节点级别的。此外,默认情况下,字段数据缓存的大小是无限的

我们可以控制字段数据缓存的过期时间,默认情况下字段数据缓存是永不过期的。用indices.fielddata.cache.expire属性来控制。重建字段数据缓存是非常昂贵的,一般情况下,不应该设置过期时间。

断路器

字段数据断路器允许估计一个字段加载到缓存所需的内存。利用它,可以抛出异常防止一些字段加载到内存。有两个属性来控制其行为,indices.fielddata.break.limit,默认是80%。indices.fielddata.break.overhead,默认是1.03,定义了用来与原始估计相乘的一个常量。

存储模块

Elasticsearch中的存储模块负责控制如何写入索引数据。
利用index.store.type属性,指定使用存储的类型:

索引缓冲和刷新率

Elasticsearch允许设置最大的内存数。indices.memory.index_buffer_size设置节点上所有索引分片共拥有的最大内存大小。例如20%,Elasticsearch提供最大堆大小20%的内存给索引缓冲。

indices.memory.min_index_buffer_size,默认是4mb,允许每个分片设置最小索引缓冲。

索引刷新率

index.refresh_interval指定在索引搜索器对象刷新频率,默认是1s,基本意味着数据视图刷新的频率。刷新率越低,文档对搜索操作可视的时间越短和索引操作将会变慢。
当对数据重建索引时,建议在索引阶段把index.refresh_interval属性设为-1。

线程池的配置

Elasticsearch使用多个池来控制线程的处理。
Elasticsearch公开的如下线程池类型:


一些通用的建议来配置高索引和查询吞吐量的集群

必须给予Elasticsearch足够的内存,而且是物理内存。一般来说,运行Elasticsearch的JVM进程不应该超过可用内存的50%或60%。另外,把Xms和Xmx参数设置为相同的值以避免JVM堆的大小调整。

  1. 选择正确的存储
    除了物理内存以外,应该选择正确的存储实现。如果运行64位操作系统,应该选择mmapfs。如果没有运行64位系统,UNIX系统选择niofs,windows系统选择simplefs。如果可以容忍一个易失的存储,但希望它非常快,可以选择memory存储。
  2. 索引刷新率
    刷新率指定文档多块可以对搜索可见。刷新率越快,查询越慢,索引吞吐量越低。如果允许一个较慢的刷新率,如10s或30s,这使得Elasticsearch承受的压力更少,因此内部对象重新打开的频率更低,因此,将有更多的资源用于索引和查询。
  3. 优化线程池
    强烈建议调整默认线程池,尤其是查询操作。在性能测试之后,通常看到集群上的查询不堪重负,这是应该开始拒绝请求。大多数情况下,最好立刻拒绝该请求,而不是放到队列中并强制程序等待很长时间请求处理。
  4. 优化合并过程
    合并过程很大程度上取决于用例,以及若干因素。查询多个段跟查询数量更少的段相比更慢。但是,想查询数目更少的段,需要更多的代建进行合并。
    通常来说,如果想查询更快,应该以索引中更少的段为目标。如果想索引更快,应该有更多的段。使用并行合并调度器并调整默认调节值,是I/O子系统不会被合并吞没。
  5. 字段数据缓存和断路器
    默认情况下,字段数据缓存是无限的。有两个不同因子可以调节,来确保不会遇到内存不足错误。首先,可以限制字段数据缓存的大小。其次是断路器,通过它配置成加载过多数据时抛出一个异常。
  6. 索引的内存缓冲区
    用于索引缓冲区的可用内存越多(indices.memory.index_buffer_size),Elasticsearch可以在内存总保存的文档也越多。默认情况下,属性值是10%,如果需要更高的索引比例,可以提高这个百分比。
  7. 优化事务日志
    Elasticsearch有个内部模块称为translog。它是分片上的结构,为预写日志服务。
    默认情况下,Elasticsearch在事务日志中保存最多5000次操作,同时最大不超过200mb。如果想要更高的索引吞吐量,又可以承担数据对搜索操作不可见的时间更长,就可以提高这个默认值。index.translog.flush_threhold_ops和index.translog.flush_threhold_size(两者都是索引上的设置,可以通过Elasticsearch API实时更新)。
  8. 牢记于心
    除了上面提到的因素,应该监视Elasticsearch集群并作出相应的反应。

Elasticsearch--集群&吞吐量的更多相关文章

  1. ES2:ElasticSearch 集群配置

    ElasticSearch共有两个配置文件,都位于config目录下,分别是elasticsearch.yml和logging.yml,其中,elasticsearch.yml 用来配置Elastic ...

  2. Elasticsearch 集群 单服务器 超级详细教程

    前言 之前了解了Elasticsearch的基本概念.将spring boot + ElasticSearch + head插件 搞通之后.紧接着对es进行下一步的探索:集群.查阅资料的过程中,找到了 ...

  3. ElasticSearch集群介绍二

    ElasticSearch集群 一个运行中的 Elasticsearch 实例称为一个 节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力. ...

  4. ELK 性能(4) — 大规模 Elasticsearch 集群性能的最佳实践

    ELK 性能(4) - 大规模 Elasticsearch 集群性能的最佳实践 介绍 集群规模 集群数:6 整体集群规模: 300 Elasticsearch 实例 141 物理服务器 4200 CP ...

  5. ELK 性能(3) — 在 Docker 上运行高性能容错的 Elasticsearch 集群

    ELK 性能(3) - 在 Docker 上运行高性能容错的 Elasticsearch 集群 介绍 在 Docker 上运行高性能容错的 Elasticsearch 集群 内容 通常熟悉的开发流程是 ...

  6. 400+节点的 Elasticsearch 集群运维

    本文首发于InfoQ https://www.infoq.cn/article/1sm0Mq5LyY_021HGuXer 作者:Anton Hägerstrand 翻译:杨振涛 目录: 数据量 版本 ...

  7. Elasticsearch集群 管理

    第7章 深入Elasticsearch集群 启动一个Elasticsearch节点时,该节点会开始寻找具有相同集群名字并且可见的主节点.如 果找到主节点,该节点加入一个已经组成了的集群:如果没有找到, ...

  8. 【Elasticsearch】深入Elasticsearch集群

    7.1 节点发现启动Elasticsearch的时候,该节点会寻找有相同集群名字且课件的主节点,如果有加入,没有自己成为主节点,负责发现的模块两个目的 选出主节点以及发现集群的新节点7.1.1发现的类 ...

  9. Elasticsearch 集群分配多少分片合理

    Elasticsearch 是一个非常通用的平台,支持各种用户实例,并为组织数据和复制策略提供了极大的灵活性.但是,这种灵活性有时会使我们很难在早期确定如何很好地将数据组织成索引和分片,尤其是不熟悉 ...

  10. ElasticSearch集群-Windows

    概述 ES集群是一个P2类型的分布式系统,除了集群状态管理以外,其他所有的请求都可以发送到集群内任意一台节点上,这个节点可以自己找到需要转发给哪些节点,并且直接跟这些节点通信.所以,从网络架构及服务配 ...

随机推荐

  1. Random产生随机数问题

    昨天在开发时发现这个问题,在同一个for循环内,通过Random多次产生随机数得到的随机数竟是一样的!以前还真没发现这个问题. 以下是简化的代码,如果将random定义在for循环外面则不会有问题(猜 ...

  2. react-loadable 进行代码分割的基本使用

    由上篇文章我们可以知道,我的项目,打包后的 js 是 7M 的,首屏就加载 7M 的文件虽然没什么特别大的缺点,但总不是最优的解决办法 因此我们用到了 react-router4 的 react-lo ...

  3. Django框架之路由

    1,路由系统就是url系统,整个url系统就是请求进入Django项目的入口,每一个请求的种类由url分析完毕并再去返回相应的响应,它的本质是url与要为该url调用的视图函数之间的映射关系表(当项目 ...

  4. C中使用memset

    int i; cout<<memset(&i,1,sizeof(int))<<endl; 输出结果是16843009,而不是填充的1111 1111,为什么呢? 因为m ...

  5. flask 文件下载 文件服务器 请求参数 函数修饰符

    180M电子书 通过已经下载到pc,在上传到私有公网服务器,之后,再异地下载 以下代码,文件内容错乱 [root@bigdata-server- mydataweb]# tree . ├── mydl ...

  6. 现在企业流行的java框架技术

    我将简短分析被用于支持这些框架的企业开发环境或工具箱,例如Borland JBuilder,Eclipse以及BEA Workbench.请记住,市场上有许多有关这些开发框架的图书;然而,在任何一篇文 ...

  7. hta+vbs+js+div+css (javascript是原生态的)

    talbe是javascript动态生成的,根据你的sql语句来的,分页是vbs用数组来造的轮子,vbs这脚本虽然强大,却没有返回数据集的东东,数组来做简单的分页还是比较简单的,批量跟新呢?是上传ex ...

  8. WIN7 64位升级更新到IE10或IE11后,IE不能打开

    权限问题,已经解决 解决办法: 用regedit打开注册表,找到 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main 对左侧树Mai ...

  9. 安装oh-my-zsh失败,可按以下方式安装

    参考:https://jingyan.baidu.com/article/8065f87fae247e2330249876.html .打开 iTerm21. .下载 : git clone git: ...

  10. Watir: 右键点击实例(某些如果应用AutoIt来做会更加简单高效)

    require 'watir' module Watir class Element def top_edge assert_exists assert_enabled ole_object.getB ...