使用bulk聚合插件(faster-bulk)

更新时间:
复制为 MD 格式

faster-bulk 是系统内置的写入优化插件,支持按指定大小与时间间隔聚合 Bulk 请求,防止小批量写入阻塞队列,适用于高吞吐、多分片场景。该插件默认关闭,需手动开启后生效。因聚合会引入等待延迟,不适用于低延迟写入场景。

使用须知

使用前需先安装插件,请参见安装或卸载系统默认插件

写入性能参考

以下为faster-bulk插件在特定测试环境下的性能数据,供评估参考。

测试环境:3 * 1664 GB数据节点 + 2 * 1664 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"
   }
}