• elasticsearch 5.x 系列之二 线程池的设置


    1,概述

    每个Elasticsearch节点内部都维护着多个线程池,如index、search、get、bulk等,用户可以修改线程池的类型和大小,以及其他的比如reflesh, flush,warmer 等,
    我们一般需要关注的只是:
    index,search,get,bulk 就ok了,其他的可以用到的时候再具体进行查看。

    2,查看线程组的状态

    curl -XGET http://master:9200/_nodes/stats?pretty
    如下截取部分thread_pool 的部分结果:

    bulk: {
    threads: 2,
    queue: 0,
    active: 0,
    rejected: 0,
    largest: 2,
    completed: 5
    },
    generic: {
    threads: 5,
    queue: 0,
    active: 0,
    rejected: 0,
    largest: 5,
    completed: 3027787
    },
    get: {
    threads: 0,
    queue: 0,
    active: 0,
    rejected: 0,
    largest: 0,
    completed: 0
    },
    index: {
    threads: 0,
    queue: 0,
    active: 0,
    rejected: 0,
    largest: 0,
    completed: 0
    },
    search: {
    threads: 4,
    queue: 0,
    active: 0,
    rejected: 0,
    largest: 4,
    completed: 54
    },
    

    其中,需要关注的是rejected。当某个线程池active==threads时,表示所有线程都在忙,那么后续新的请求就会进入queue中,即queue>0,一旦queue大小超出限制,比如bulk的queue默认100,那么elasticsearch进程将拒绝请求(碰到bulk HTTP状态码429),相应的拒绝次数就会累加到rejected中。
    对于被拒绝的请求:我们一般用如下的方法规避。

    1、记录失败的请求并重发
    2、减少并发写的进程个数,同时加大每次bulk请求的size

    核心的线程如下:
    generic:通用操作,如node discovery。它的类型默认为cached。
    index:此线程池用于索引和删除操作。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为200。
    search:此线程池用于搜索和计数请求。它的类型默认为fixed,size默认为(可用处理器的数量* 3) / 2) + 1,队列的size默认为1000。
    suggest:此线程池用于建议器请求。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为1000。
    get:此线程池用于实时的GET请求。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为1000。
    bulk:此线程池用于批量操作。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为50。
    percolate:此线程池用于预匹配器操作。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为1000。

    3,线程池的主要类型如下:

    1、cached
    无限制的线程池,为每个请求创建一个线程。这种线程池是为了防止请求被阻塞或者拒绝,其中的每个线程都有一个超时时间(keep_alive),默认5分钟,一旦超时就会回收/终止。elasticsearch的generic线程池就是用该类型。最近发现5.0.0-alpha2版本中去掉了该类型的线程池
    2、fixed
    有着固定大小的线程池,大小由size属性指定,默认是5*cores数,允许你指定一个队列(使用queue_size属性指定,默认是-1,即无限制)用来保存请求,直到有一个空闲的线程来执行请求。如果Elasticsearch无法把请求放到队列中(队列满了),该请求将被拒绝。
    3、scaling
    可变大小的pool,大小根据负载在1到size间,同样keep_alive参数指定了闲置线程被回收的时间。

    ,4,线程池的配置:

    1,可以,在elasticsearch.yml 进行配置
    threadpool.index.type: fixed
    threadpool.index.size: 100
    threadpool.index.queue_size: 500
    2,也可以利用api 进行设置
    curl -XPUT 'localhost:9200/_cluster/settings' -d '{
    "transient": {
    "threadpool.index.type": "fixed",
    "threadpool.index.size": 100,
    "threadpool.index.queue_size": 500
    }
    }'

  • 相关阅读:
    RabbitMQ学习笔记【1】
    【转】ES6学习笔记
    vue学习笔记【2】--模板语法
    vue学习笔记【1】
    npm使用
    Golang密码复杂度校验
    GORM的增删改查
    GORM:创建数据
    golang的time包:时间字符串和时间戳的相互转换
    输出10以内的所有正整数(while+if用法)
  • 原文地址:https://www.cnblogs.com/unnunique/p/9362083.html
Copyright © 2020-2023  润新知