Elasticsearch 内部使用了线程池,通过这些线程池之间的合作完成工作。一般不需要调整和优化线程池。但线程池的状态,有利于你掌握集群行为。
线程池格式:
“index”: {
“threads”: 1,
“queue”: 0,
“active”: 0,
“rejected”: 0,
“largest”: 1,
“completed”: 1
}
每个线程都列出了配置的线程数,活动的线程是正在处理事务的,在队列里多少等待处理的事务。
若队列满了,超出了限制,开始拒绝新的事务,表示集群正处在资源瓶颈,表示你的集群或者节点正在以最大的速度处理事务,但赶不上新事务增加的速度。
bulk批量索引的请求线程队列是最有可能出现拒绝请求的事情,队列的拒绝是对压力的一个有效措施,表示集群正处于最大的容量,比把数据全部塞到内存队列里要好。增大队列大小不会提升性能,它只会隐藏问题。
解决队列满了的问题是清理队列。当你遇到bulk拒绝请求时候,你应该采取如下措施:
1、停止插入线程3-5秒
2、从bluk请求里提取被拒绝的操作,可能大部分请求都成功了。bulk的响应里会告诉你哪些操作成功了,哪些操作被拒绝了。
3、把拒绝的操作重新生成一个新的bulk请求。
4、如果再有拒绝请求发生,就重复上面的步骤。
通过这种方式,你的代码会自然的适应你的集群的负载,自然的减压。
Elasticsearch之ThreadPool部分
最新推荐文章于 2024-02-07 07:56:13 发布