OpenSearch 2.18.0 版本特性深度解读:Workload Management 弹性治理、Phone 号码分析器与集群可观测性增强
OpenSearch 2.18.0 版本特性深度解读Workload Management 弹性治理、Phone 号码分析器与集群可观测性增强【免费下载链接】OpenSearch Open source distributed and RESTful search engine.项目地址: https://gitcode.com/gh_mirrors/op/OpenSearch本文围绕 OpenSearch 2.18.0 Release Notes2024-10-28 发布展开系统梳理该版本在 Workload Management 查询组弹性、电话号码分析能力、S3 存储与快照、分层缓存、集群可观测性与 _list 系列分页 API 等方面的核心变化并结合本仓库源码server、plugins 目录验证实现细节。读完本文你将掌握 2.18.0 新增 API 的用法、phone 分析器的配置方式以及各项增强背后的设计意图为集群升级与功能选型提供依据。一、版本概览2.18.0 的关键主题2.18.0 是 OpenSearch 在 2024 年 10 月 28 日发布的稳定版本其核心主题可归纳为三方面Workload Management工作负载管理进入弹性治理新阶段新增 QueryGroupService 编排器、任务资源取消框架、QueryGroup Stats API并补齐 CRUD 集成测试、跨进程持久化与多节点执行路径搜索与分析能力扩展新增phone/phone-search分析器位于新插件analysis-phonenumber、msearch 管道、successfulSearchShardIndices追踪、Star Tree 指标聚合支持等存储、缓存与可观测性增强S3 异步删除、增量全集群快照 clone 优化、分段缓存Segmented Cache、_list/indices与_list/shards分页 API、REMOTE_STORE节点指标等。同时Lucene 从 9.11.1 升级至 9.12.0Netty 升级至 4.1.114.FinalLog4j 升级至 2.24.0。二、Workload Management查询组弹性治理全面落地Workload Management 是 2.18.0 中最具分量的一组新增功能仓库中对应实现集中在 server/src/main/java/org/opensearch/wlm 与 server/src/main/java/org/opensearch/action/admin/cluster/wlm。2.1 QueryGroupService 编排器#15925新增的QueryGroupService是 WLM 弹性机制resiliency的核心编排器负责查询组的生命周期管理、状态维护与跨组件协调。从 WorkloadGroupService.java 可以看出查询组以系统索引为存储载体配合WorkloadGroupTask、WorkloadGroupThreadContextStatePropagator、WorkloadGroupsStateAccessor等类完成状态传播与访问控制。2.2 资源取消框架#15651wlm/cancellation包引入任务取消框架TaskSelectionStrategy.java定义取消哪个任务的策略抽象MaximumResourceTaskSelectionStrategy.java默认策略优先取消占用资源最多的任务WorkloadGroupTaskCancellationService.java取消服务的具体实现。配套的 #16417 增强了 WLM 的拒绝rejection机制使超限查询组能获得更可控的反馈。2.3 QueryGroup Stats API#15777新增_plugins/_wlm/query_group/stats类统计接口底层为 WlmStatsAction.java其 Action 名为cluster:monitor/wlm/stats响应结构由 WlmStatsResponse.java 承载并支持SortBy、SortOrder排序见 stats/SortBy.java。状态视图包括 WorkloadGroupState.java 与 WorkloadGroupStats.java资源使用情况由 WorkloadGroupLevelResourceUsageView.java 呈现。该 API 标注为opensearch.experimental属实验特性生产使用前需关注后续版本稳定性。2.4 CRUD 集成测试与健壮性修复#15955 为 WLM CRUD API 补充了集成测试#16370 使查询组在进程重启后依然持久persistent across restarts#16422 修复了 Create/Update QueryGroup TransportAction 只能在集群管理器节点执行的问题现在可从任意非集群管理器节点发起。2.5 动态设置与拦截器WorkloadManagementSettings.java 定义各阈值设置WorkloadManagementTransportInterceptor.java 负责在传输层拦截并归属请求到对应查询组WorkloadGroupRequestOperationListener.java 作为请求操作监听器嵌入执行流程。三、新增 phone 与 phone-search 分析器#159152.18.0 引入全新插件analysis-phonenumber提供phone与phone-search两种分析器专用于电话号码字段的索引与检索。实现位于 plugins/analysis-phonenumber/src/main/java/org/opensearch/analysis/phone。3.1 设计理念索引与搜索分离phone分析器用于索引阶段analyzer会生成电话号码的ngram前缀词元如1、91、919…支持前缀模糊匹配phone-search分析器用于检索阶段search_analyzer不生成 ngram只输出完整号码词元避免查询时误匹配其他国家的号码。两者共用 PhoneNumberTermTokenizer.java通过构造参数addNgrams区分行为索引为 true、搜索为 false详见 PhoneNumberAnalyzer.java 的createComponents实现。3.2 底层 token 化逻辑PhoneNumberTermTokenizer.java 的getTokens()依次执行保留原始输入作为词元剥离tel:与sip:前缀索引模式下会额外保留该前缀词元去掉开头的截断之后的域名部分适配 SIP 地址调用 GooglelibphonenumberPhoneNumberUtil解析号码提取国家码与国内号码产出countryCode nationalNumber完整词元索引模式下对纯数字串生成所有长度的前缀 ngram若存在国家码还会生成countryCode prefix形式的扩展 ngram。如果号码无法被 libphonenumber 解析例如NumberParseException则退化为直接按原始输入 ngram保证垃圾进、垃圾出而非抛错。3.3 phone-region 设置可通过phone-region设置指定默认区域ISO 3166-1 国家码如CH、US使不带国际前缀的号码也能被正确解析。测试配置 phone_analysis.json 展示了完整写法{ index: { analysis: { analyzer: { phone: { type: phone }, phone-search: { type: phone-search }, phone-ch: { type: phone, phone-region: CH }, phone-search-ch:{ type: phone-search, phone-region: CH } } } } }在索引映射中的典型用法PUT /contacts { settings: { analysis: { analyzer: { phone: { type: phone }, phone-search: { type: phone-search } } } }, mappings: { properties: { phone_number: { type: text, analyzer: phone, search_analyzer: phone-search } } } }3.4 词元行为验证源码测试PhoneNumberAnalyzerTests.java 给出了可复现的词元输出示例输入tel:441344840400phone分析器产出tel:、44、441、13、1344、1344840400、441344840400等 ngram 词元同一输入经phone-search分析器仅产出tel:441344840400与441344840400两个词元SIP 地址sip:14177141363178.97.105.13;...可提取出417、4177、14177带分机号sip:13169410766;ext2233...会产出扩展号词元2233。YAML REST 测试见 10_basic.yml 与 20_search.yml。四、存储、快照与远程仓库增强4.1 S3BlobContainer 异步删除#15621为 S3 仓库的BlobContainer增加异步删除能力减少删除大量分片 blob 时对传输线程的阻塞。该项配合 #15978 ——S3 客户端默认重试机制由旧模式切换为 Standard ModeAWS SDK 的标准重试模式使重试行为更可预期、吞吐表现更稳定。4.2 增量全集群快照 clone 优化#16296优化增量全集群快照incremental full cluster snapshot的 clone 操作路径降低重复数据拷贝开销。同时 #16292 支持在快照恢复snapshot restore过程中重命名 alias为恢复场景提供了更大的灵活性。4.3 其他相关修复#16194修复安装 repository-s3 插件后启动时 SLF4J 警告#16254修复通过客户端依赖泄漏 protobuf-java 的问题#16201修复任务索引映射缺少字段导致任务结果无法正确存储的问题。五、缓存、查询与索引优化5.1 Tiered Caching 分段缓存#16047分段缓存Segmented Cache是分片请求缓存shard request cache的分段化演进将缓存按段segment组织配合查询取消机制可减少缓存失效与内存抖动为大型集群的查询缓存命中率优化提供基础。5.2 flat_object 字段查询优化#14383flat_object字段改用IndexOrDocValuesQuery执行查询当索引中存在可用倒排索引时走索引查询否则回退 doc values显著改善flat_object字段的过滤与匹配性能。同时 #15985 修复了flat_object字段包含非法 token 时可能陷入无限循环的问题#16273 清理并移除了旧的ApproximateIndexOrDocValuesQuery实现。5.3 Star Tree 指标聚合#15289Star Tree 搜索路径新增对metric 聚合含/不含 term query的支持使星树预聚合索引能直接服务更多聚合查询模式减少实时计算开销。5.4 通配符与搜索相关修复#15737修复通配符查询中含转义字符的解析问题#15882修复通配符字段上的大小写不敏感查询#15988修复search_as_you_type不支持多字段multi-fields的问题#15931修复嵌套聚合nested agg中的无限循环#14948修复将 replica 显式设为 null 时更新设置不生效的集群设置 bug#16331修复建索引时index.number_of_routing_shards设为 null 的默认值错误。六、集群管理与可观测性6.1 _list/indices 与 _list/shards 分页 API#14718、#146412.18.0 引入_list/indices与_list/shards作为_cat/indices、_cat/shards的分页替代方案解决超大集群下 cat 输出行数爆炸的问题。二者与 #15986 配套——后者为cat shards、cat indices、cat segments增加动态限制设置当集群规模超过阈值时可阻止调用保护协调节点不被 cat 请求压垮。典型用法示意# 分页拉取索引列表 curl -X GET localhost:9200/_list/indices?page1page_size50 # 分页拉取分片列表 curl -X GET localhost:9200/_list/shards?page1page_size506.2 NodeStats 新增 REMOTE_STORE 指标#15611_nodes/stats响应中新增REMOTE_STORE指标分组用于观测远程存储remote store相关状态配合 remote-backed storage 场景排查分段上传与恢复瓶颈。6.3 异步分片抓取指标#15976为异步分片抓取async shard fetch补充 success / failure 指标帮助定位搜索阶段分片数据抓取的失败率与延迟来源。6.4 其他可观测性增强#16290协调节点coordinator的search.request_stats_enabled设置改为默认开启搜索请求级统计开箱即用#15938cluster stats API 支持URI path 过滤可只统计指定路径path下的索引#16347将多个设置改为动态dynamic便于大集群在线调优而无需重启#16236支持动态调整线程池大小配合动态设置实现在线容量伸缩。七、搜索 API 与传输层增强7.1 msearch 支持 search pipeline#15923_msearch多搜索 API 现在可以为每个子请求指定search pipeline 名称使管道化处理重写、归一化、后处理在多搜索场景下同样可用。7.2 搜索上下文增强#15967、#16110searchRequestContext新增successfulSearchShardIndices记录搜索请求中成功返回的 shard 集合便于在部分 shard 失败时精确统计成功分片为部分结果场景partial results提供数据支撑。7.3 集群状态回退#15424当 Term-Version 校验不一致check mismatch时节点可回退到远程集群状态remote cluster-state提升集群元数据同步的容错性。7.4 安全传输参数与代码清理#16387SecureTransportSettingsProvider接口新增返回动态SecureTransportParameters的方法使安全传输参数可随环境动态变化#15430、#16024从 RestController 移除 identity 相关 feature-flagged 代码并删除 Identity FeatureFlag#16154确保RestHandler.Wrapper将全部实现委托给被包装的 handler。7.5 索引与请求处理修复#16158修复 streaming bulk 请求挂起问题#16337修复 Streaming Indexing 偶发的The bulk request must be terminated by a newline [\n]失败#16265修复带模板的 multi-search 不返回状态码的问题#15521修复节点加入与离开node-join / node-left路径的竞态条件。八、依赖升级一览2.18.0 同步升级了一批关键依赖Dependencies 部分依赖版本变化Apache Lucene9.11.1 → 9.12.0log4j-core2.23.1 → 2.24.0Netty4.1.112.Final → 4.1.114.FinalRoaringBitmap1.2.1 → 1.3.0protobuf3.22.3 → 3.25.4 → 3.25.5gson2.10.1 → 2.11.0grpc-api1.57.2 → 1.68.0jline3.26.3 → 3.27.0azure-identity1.13.0 → 1.13.2nimbus-jose-jwt9.40 → 9.41.1okio3.9.0 → 3.9.1japicmp (gradle 插件)0.4.3 → 0.4.4其中 Lucene 9.12.0 与 Netty 4.1.114 的升级对查询、网络栈的稳定性有直接影响。九、其他值得关注的变化#15916在ValuesSourceAggregationBuilder与FieldSortBuilder中实现WithFieldName接口统一字段名访问方式#13574新增offline-tasks 库提供离线后台任务Offline Background Tasks所需的各类接口为未来离线任务体系打基础#16049TestFixturesPlugin 支持 docker compose v2#16215在 commit 阶段更新 last seen cluster state提升集群状态一致性感知#15386修复以count()结尾的低效 Stream API 调用链#15362修复RemoteStoreNodeAttribute.toString()中super误写为sb的笔误#16378修复ResyncReplicationRequest中数组 hashCode 计算错误#15501为搜索背压search backpressure取消设置增加参数校验。十、升级与使用建议若集群已启用分片请求缓存且查询缓存命中率波动明显可关注Segmented Cache并做 A/B 对比验证需要做电话号码前缀/模糊检索的业务可直接安装analysis-phonenumber插件并严格遵循索引用phone、检索用phone-search的分离策略注意分析器基于 libphonenumber建议用 PhoneNumberAnalyzerTests.java 中的用例先行验证词元是否符合预期超大集群的_cat类调用应迁移到_list/indices、_list/shards分页 API并为cat设置动态限制阈值Workload Management 相关 API 仍标注为实验特性opensearch.experimental生产环境引入前建议先在小规模集群验证取消策略MaximumResourceTaskSelectionStrategy与拒绝行为升级时注意 Lucene 9.12、Netty 4.1.114 与 protobuf 3.25.5 的兼容性建议参考仓库 CHANGELOG.md 与 TESTING.md 中的验证流程。总体而言2.18.0 在多租户资源治理WLM、电话号码检索体验、远程存储与缓存性能、以及大规模集群可观测性四条主线上均有关键进展是从 2.17 升级的重要候选版本。【免费下载链接】OpenSearch Open source distributed and RESTful search engine.项目地址: https://gitcode.com/gh_mirrors/op/OpenSearch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考