限流 #
Easysearch 支持节点级别和分片级别的写入限流功能,可以将 bulk 操作对集群的压力,限制在可接受的范围。
最低版本 #
1.8.0
限流参数设置 #
以下是 Easysearch 集群级别的限流设置,并且是动态的,您可以更改此功能的默认行为,而无需重新启动集群。
限流参数说明
名称 | 类型 | 说明 | 默认值 |
---|---|---|---|
cluster.throttle.node.write | boolean | 是否启用节点级别限流 | false |
cluster.throttle.node.write.max_requests | int | 限定时间范围内单个节点允许的最大写入请求次数 | 500000 |
cluster.throttle.node.write.max_bytes | 字符串 | 限定时间范围内单个节点允许的最大写入请求字节数(kb, mb, gb 等) | 100mb |
cluster.throttle.node.write.action | 字符串 | 触发限速之后的处理动作,分为 retry 和 drop 两种,默认为 drop | drop |
cluster.throttle.node.write.interval | int | 节点级别评估限速的单位时间间隔,默认为 1s | 1 |
cluster.throttle.shard.write | boolean | 是否启用分片级别限流 | false |
cluster.throttle.shard.write.max_requests | int | 限定时间范围内单个分片允许的最大写入请求次数 | 500000 |
cluster.throttle.shard.write.max_bytes | 字符串 | 限定时间范围内单个分片允许的最大写入请求字节数(kb, mb, gb 等) | 100mb |
cluster.throttle.shard.write.action | 字符串 | 触发限速之后的处理动作,分为 retry 和 drop 两种,默认为 drop | drop |
cluster.throttle.shard.write.interval | int | 分片级别评估限速的单位时间间隔,默认为 1s | 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, 实际流量计算会稍有偏差。
注意事项 #
节点级别限流针对所有能接收客户端bulk请求的节点。
分片级别限流只计算从协调节点分发到数据节点主分片的bulk请求。
节点级别和分片级别限流不冲突,可以同时启用。
限流功能不会限制系统索引流量,只针对业务索引。