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
}
}'
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于