You need to enable JavaScript to run this app.
导航

Bulk 定向路由

最近更新时间2024.04.09 10:50:42

首次发布时间2024.04.09 10:50:42

采用 bulk 写入数据时,ES 写入请求将根据默认路由规则划分到不同分片执行写入。在实例节点数较多、索引包含的分片数较多的场景中容易出现写入长尾效应,将导致整个 bulk 请求响应缓慢堆积。
您可以通过指定配置项index.shard_routing.enabled开启 bulk 定向路由,开启后可以将批写请求随机指定单个 shard,从而避免写入长尾效应。

背景信息

配置项index.shard_routing.enabled的默认值为 false,表示使用默认路由规则,即默认采用_id作为单个文档写入的 routing;设置为 true,则表示开启 bulk 定向路由,可以避免写入长尾效应。
在实例节点数较多、索引包含的分片数较多的场景中开启 bulk 定向路由,能提升消费速率、降低集群 Load、降低写入拒绝次数。

功能限制

  • 目前仅支持在 2023 年 10 月以后创建的 ES 7.10.2 版本实例和 OpenSearch 2.9.0 版本实例支持开启 bulk 定向路由。
  • 只有写入的数据不带主键,配置项index.shard_routing.enabled才有效果。
  • 开启 bulk 定向路由后,无法直接根据_id获取 doc 信息。
  • 开启 bulk 定向路由后,不支持 deletebyquery 和 updatebyquery 功能。

开启 bulk 定向路由

您可以在创建索引时指定index.shard_routing.enabled配置项,也可以在索引创建后动态更新index.shard_routing.enabled配置项。

  • 创建索引时开启 bulk 定向路由

    PUT <index-name>
    {
      "settings": { 
        "index.shard_routing.enabled": true
      } 
    }
    
  • 动态更新 bulk 定向路由配置

    PUT <index-name>/_settings
    {
       "index.shard_routing.enabled": true
    }
    

常见问题

  1. 根据_id获取 doc,出现获取为空。
    开启 bulk 定向路由后,会自动为 bulk 请求随机指定单个 shard,_id和 shard 之间不再有固定映射关系。此时根据_id获取 doc 必须携带正确的 routing 才能获取单条原始的文档信息,routing 可以通过普通 query 查询获取。
  2. 开启 bulk 定向路由报错。
    您在使用云搜索服务的过程中遇到难以解决的问题,可以通过提交工单进行咨询。详情请参见技术支持