faster-bulk 是系统内置的写入优化插件,支持按指定大小与时间间隔聚合 Bulk 请求,防止小批量写入阻塞队列,适用于高吞吐、多分片场景。该插件默认关闭,需手动开启后生效。因聚合会引入等待延迟,不适用于低延迟写入场景。
使用须知
使用前需先安装插件,请参见安装或卸载系统默认插件。
写入性能参考
以下为faster-bulk插件在特定测试环境下的性能数据,供评估参考。
测试环境:3 * 16核64 GB数据节点 + 2 * 16核64 GB独立协调节点,esrally官方数据集nyc-taxis(单文档650字节),apack.fasterbulk.combine.interval设置为200ms。
translog状态 | 未使用插件 | 使用插件 | 性能提升 |
同步状态(默认) | 182314/s | 226242/s | 23% |
异步状态 | 218732/s | 241060/s | 10% |
开启bulk聚合功能
PUT _cluster/settings
{
"transient" : {
"apack.fasterbulk.combine.enabled":"true"
}
}设置聚合参数
指定bulk请求的聚合大小和时间间隔。当单个数据节点上bulk请求的累计大小或聚合时间间隔达到阈值时,触发数据写入。
PUT _cluster/settings
{
"transient" : {
"apack.fasterbulk.combine.flush_threshold_size":"1mb",
"apack.fasterbulk.combine.interval":"50"
}
}参数 | 说明 | 默认值 |
apack.fasterbulk.combine.flush_threshold_size | 单个数据节点上聚合的bulk请求的最大累计大小。 | 1mb |
apack.fasterbulk.combine.interval | 聚合的bulk请求的最大时间间隔,单位为ms。 | 50 |
对于海量数据高并发场景,在集群可承受的压力范围内,可适当调大最大聚合大小或最大时间间隔,减少bulk请求阻塞写入队列。
定向路由
当批量写入文档未指定routing和主键(_id)时,可为集群或指定索引开启定向路由,进一步提高写入速度。如果写入请求中指定了routing或主键(_id),定向路由不会生效,不影响正常的业务写入。
为集群开启定向路由:
PUT _cluster/settings
{
"persistent" : {
"index.direct_routing.global.enable" : "true"
}
}为指定索引开启定向路由:
PUT <index_name>/_settings
{
"index.direct_routing.enable" : "true"
}关闭bulk聚合功能
PUT _cluster/settings
{
"transient" : {
"apack.fasterbulk.combine.enabled":"false"
}
}该文章对您有帮助吗?