采用 bulk 写入数据时,ES 写入请求将根据默认路由规则划分到不同分片执行写入。在实例节点数较多、索引包含的分片数较多的场景中容易出现写入长尾效应,将导致整个 bulk 请求响应缓慢堆积。
您可以通过指定配置项index.shard_routing.enabled
开启 bulk 定向路由,开启后可以将批写请求随机指定单个 shard,从而避免写入长尾效应。
配置项index.shard_routing.enabled
的默认值为 false,表示使用默认路由规则,即默认采用_id
作为单个文档写入的 routing;设置为 true,则表示开启 bulk 定向路由,可以避免写入长尾效应。
在实例节点数较多、索引包含的分片数较多的场景中开启 bulk 定向路由,能提升消费速率、降低集群 Load、降低写入拒绝次数。
7.10.2
版本实例和 OpenSearch 2.9.0
版本实例支持开启 bulk 定向路由。index.shard_routing.enabled
才有效果。_id
获取 doc 信息。您可以在创建索引时指定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 }
_id
获取 doc,出现获取为空。_id
和 shard 之间不再有固定映射关系。此时根据_id
获取 doc 必须携带正确的 routing 才能获取单条原始的文档信息,routing 可以通过普通 query 查询获取。