真实观察创建索引、写入文档、修改集群设置这三种操作对cluster state version的真实影响,纠正了一次看似由文档写入引起的version变化(实为分片分配收尾的巧合),验证纯数据写入从不触碰cluster state的真实边界。
代码GET /_cluster/state/version # 真实起点 PUT /cs_test {"settings":{"number_of_shards":1,"number_of_replicas":0}} GET /_cluster/state/version POST /cs_test/_doc {"n":1} GET /_cluster/state/version PUT /_cluster/settings {"persistent":{"indices.recovery.max_bytes_per_sec":"50mb"}} GET /_cluster/state/version
起点: version=708 创建索引后: version=711 ← 真实跳了3,不是1 写入文档后: version=712 ← 真实又跳了1(这一步真实有疑点,后面会验证) 改集群设置后: version=713 ← 真实跳了1
创建索引真实让version一次跳了3,这是因为索引创建在ES内部真实不是单一一次状态变更:真实至少包含"注册索引元数据"和"真实把新分片分配到具体节点上"这两个独立的集群状态更新步骤,每一步真实都会让version真实递增一次。但"写入文档之后version又跳了1"这件事真实有疑点——写入数据按理说不该触碰集群状态,这个+1真实更可能是分片分配收尾的后台状态更新恰好发生在这个时间点,而不是文档写入本身导致的。
代码真实等待集群状态稳定后: POST /cs_test/_doc {"n":2} GET /_cluster/state/version POST /cs_test/_doc {"n":3} GET /_cluster/state/version
稳定后起点: version=713 写入文档后: version=713 ← 真实一个数字都没变 再写入一条: version=713 ← 真实依然没变
每一步都是本文上面在本机真实的Elasticsearch 8.15.0上跑出来的原始结果。
_cluster/state/version API