在系统过载时是否有一种删除Elasticsearch请求的好方法?我知道ES有一个批量拒绝系统,但是当我达到某个阈值/限制时,我希望通过将请求丢弃到ES和我的系统来防止任何超载。有没有办法做到这一点?
答案 0 :(得分:0)
由于documentation,您可以通过绑定queue_size
来限制请求。 queue的默认值为-1,这意味着它没有任何上限来处理查询。
每个请求(操作)都有自己的线程池,每个线程池可以是a)fixed和b)fixed_auto_queue_size两种类型之一。
绑定固定的:
thread_pool:
[request/operation]:
queue_size: X
固定自动一个:
thread_pool:
[request/operation]:
queue_size: X
min_queue_size: Y
max_queue_size: Z
答案 1 :(得分:0)
因此,您需要控制多种因素:
1)使用curl -X GET http://localhost:9200/_cat/thread_pool
检查批量性能,您将获得队列中的记录数以及被拒绝的记录数。 Check this了解更多信息根据您的流量设置批量队列大小和索引队列大小为mentioned here。
thread_pool.bulk.size: 24
thread_pool.bulk.queue_size: 200
thread_pool.index.size : 24
thread_pool.index.queue_size : 200
这里24是核心cpus的数量,这确保你的所有CPU都应该使用。
2)完成上述设置后,Elasticsearch将批量接受您的请求,并按照指定的大小排列您的所有数据。但是,一旦您的流量超过批量队列大小,它将再次开始拒绝。因此,请确保在特定时间间隔内进行持续批量请求。
3)增加刷新间隔。默认情况下,它设置为1秒,这意味着您的文档将在一秒后可用于搜索,但其昂贵的操作因此使其成为30秒或适合您的ES群集。因此,您的文档将在30秒后可供搜索。
4)有关详细信息,请参阅此https://gist.github.com/ashishtiwari1993/004a19f4a44efc214403a7fc1ee27cda