限流
> 文档中心 > 文档中心 > INFINI Easysearch > 功能手册 > 管理模块 > 限流

限流 #

Easysearch 支持节点级别和分片级别的写入限流功能,可以将 bulk 操作对集群的压力,限制在可接受的范围。

最低版本 #

1.8.0

限流参数设置 #

以下是 Easysearch 集群级别的限流设置,并且是动态的,您可以更改此功能的默认行为,而无需重新启动集群。

限流参数说明

名称类型说明默认值
cluster.throttle.node.writeboolean是否启用节点级别限流false
cluster.throttle.node.write.max_requestsint限定时间范围内单个节点允许的最大写入请求次数0
cluster.throttle.node.write.max_bytes字符串限定时间范围内单个节点允许的最大写入请求字节数(kb, mb, gb 等)0mb
cluster.throttle.node.write.action字符串触发限速之后的处理动作,分为 retry 和 drop 两种,默认为 dropdrop
cluster.throttle.node.write.intervalint节点级别评估限速的单位时间间隔,默认为 1s1
cluster.throttle.shard.writeboolean是否启用分片级别限流false
cluster.throttle.shard.write.max_requestsint限定时间范围内单个分片允许的最大写入请求次数0
cluster.throttle.shard.write.max_bytes字符串限定时间范围内单个分片允许的最大写入请求字节数(kb, mb, gb 等)0mb
cluster.throttle.shard.write.action字符串触发限速之后的处理动作,分为 retry 和 drop 两种,默认为 dropdrop
cluster.throttle.shard.write.intervalint分片级别评估限速的单位时间间隔,默认为 1s1
index.throttle.write.enableboolean是否针对当前索引启用写入限流(索引 Settings 配置)false
index.throttle.write.max_requestsint限定时间范围内当前索引允许的最大写入请求次数(索引 Settings 配置)0
index.throttle.write.max_bytes字符串限定时间范围内当前索引允许的最大写入请求字节数(kb, mb, gb 等)(索引 Settings 配置)0mb
index.throttle.write.action字符串触发限速之后的处理动作,分为 retry 和 drop 两种,默认为 drop(索引 Settings 配置)drop
index.throttle.write.intervalint当前索引评估限速的单位时间间隔,默认为 1s(索引 Settings 配置)1

使用示例 #

节点级别限流 #

PUT _cluster/settings
{
  "transient": {
    "cluster.throttle.node.write": true,
    "cluster.throttle.node.write.max_bytes": "50MB",
    "cluster.throttle.node.write.max_requests": 1000000,
    "cluster.throttle.node.write.action": "retry"
  }
}

以上配置表示开启节点限流功能,限定时间范围内单个节点允许最大写入50MB的数据,并且写入条数限制在100万,超过设定的阈值后会持续重试1秒钟,实际流量计算会稍有偏差。

分片级别限流 #

PUT _cluster/settings
{
  "transient": {
    "cluster.throttle.shard.write": true,
    "cluster.throttle.shard.write.max_bytes": "50MB",
    "cluster.throttle.shard.write.max_requests": 1000000,
    "cluster.throttle.shard.write.action": "drop"
  }
}

以上配置表示开启分片限流功能,限定时间范围内单个分片允许最大写入50MB的数据,并且写入条数限制在100万,超过设定的阈值后会立即拒绝写入,返回 rejected execution, 实际流量计算会稍有偏差。

索引级别限流 #

有时,我们需要只针对个别索引进行写入限流,又不想影响其他索引的写入速度,可以在创建索引时在 Settings 里指定相应的限流配置项:

PUT test_0
{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 3,
    "index.throttle.write.max_requests": 6000,
    "index.throttle.write.action": "retry",
    "index.throttle.write.enable": true
  }
}

注意事项 #

节点级别限流是针对所有 DataNode。

分片级别限流只计算从协调节点分发到数据节点主分片的 bulk 请求。

节点级别和分片级别限流不冲突,可以同时启用。

限流功能不会限制系统索引流量,只针对业务索引。