6113 字
约 20 分钟
1
JAVA 精髓面试题 · Elasticsearch 集群、分片、检索与脑裂

绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 绿色的条 ,代表集群处于绿色( 健康状态) 。 深度分页问题 深度分页问题 elasticsearch 默认情况下只返回top10的数据 。而如果要查询更多数据就需要修改分页参数了。 elasticsearch中通过修改from 、size参数来控制要返回的分页结果: ● from :从第几个文档开始 ● size :总共查询几个文档 类似于mysql中的 limit ?, ? 类似于mysql中的 limit ?, ? 类似于mysql中的 limit ?, ? 查询TOP1000, 如果es是单点模式, 这并无太大影响。 查询TOP1000, 如果es是单点模式, 这并无太大影响。 但是elasticsearch将来—定是集群 ,例如我集群有5个节点, 我要查询TOP1000的数据, 并不是 每个节点查询200条就可以了。 但是elasticsearch将来—定是集群 ,例如我集群有5个节点, 我要查询TOP1000的数据, 并不是 每个节点查询200条就可以了。 因为节点A的TOP200 ,在另—个节点可能排到10000名以外了。 【问题】 【问题】 当查询分页深度较大时, 汇总数据过多, 对内存和CPU会产生非常大的压力, 因此elasticsearch会禁止 from+ size 超过10000的请求。 针对深度分页, ES提供了两种解决方案 ,官方文档: 针对深度分页, ES提供了两种解决方案 ,官方文档: ● search after :分页时需要排序, 原理是从上一次的排序值开始 ,查询下一页数据 。官方推荐使用的 方式 。【使用search_after必须要设置from=0 。】 ● search after :分页时需要排序, 原理是从上一次的排序值开始 ,查询下一页数据 。官方推荐使用的 方式 。【使用search_after必须要设置from=0 。】 ● scroll:原理将排序后的文档id形成快照, 保存在内存 。官方已经不推荐使用 。【滚动刷新】 两种分页对比 两种分页对比 scroll的方式, 官方不建议用于实时的请求( 一般用于数据导出), 因为每一个scroll_id不仅会占用大量 的资源, 而且会生成历史快照 ,对于数据的变更不会反映到快照上。 而search_after分页的方式是根据上一页的最后一条数据来确定下一页的位置, 同时再分页请求的过程 中, 如果有索引数据的增删改查, 这些变更也会实时的反映到游标上 。但是需要注意, 因为每一页的数据依 赖于上一页的最后一条数据 ,所以没法跳页请求。 为了找到每一页最后一条数据 ,每个文档那个必须有一个全局唯一值, 官方推荐使用_uuid作为全局唯一值, 当然在业务上的id也可以。 java api做elasticsearch分页 java api做elasticsearch分页 java api做elasticsearch分页 ES在高并发下如何保证读写一致性? ES在高并发下如何保证读写一致性? ES在高并发下如何保证读写一致性? ES在高并发下如何保证读写一致性? ES在高并发下如何保证读写一致性? ES在高并发下如何保证读写一致性? (1) 对于更新操作: 可以通过版本号使用乐观并发控制, 以确保新版本不会被旧版本覆盖 (1) 对于更新操作: 可以通过版本号使用乐观并发控制, 以确保新版本不会被旧版本覆盖 每个文档都有一个 _version 版本号, 这个版本号在文档被改变时加一 。Elasticsearch使用这个 _v ersion 保证所有修改都被正确排序 。当一个旧版本出现在新版本之后, 它会被简单的忽略。 利用 _version 的这一优点确保数据不会因为修改冲突而丢失 。比如指定文档的version来做更改 。如 果那个版本号不是现在的, 我们的请求就失败了。 利用 _version 的这一优点确保数据不会因为修改冲突而丢失 。比如指定文档的version来做更改 。如 果那个版本号不是现在的, 我们的请求就失败了。 (2) 对于写操作, 一致性级别支持 quorum/one/all, 默认为 quorum, 即只有当大多数分片可用时才 允许写操作 。但即使大多数可用, 也可能存在因为网络等原因导致写入副本失败, 这样该副本被认为故 (2) 对于写操作, 一致性级别支持 quorum/one/all, 默认为 quorum, 即只有当大多数分片可用时才 允许写操作 。但即使大多数可用, 也可能存在因为网络等原因导致写入副本失败, 这样该副本被认为故 障, 分片将会在一个不同的节点上重建。 ● one:要求我们这个写操作, 只要有一个primary shard是active活跃可用的, 就可以执行 ● one:要求我们这个写操作, 只要有一个primary shard是active活跃可用的, 就可以执行 ● all:要求我们这个写操作, 必须所有的primary shard和replica shard都是活跃的, 才可以执行这个 写操作 ● quorum:默认的值, 要求所有的shard中, 必须是大部分的shard都是活跃的, 可用的, 才可以执 行这个写操作 (3) 对于读操作, 可以设置 replication 为 sync(默认), 这使得操作在主分片和副本分片都完成后才会 返回; 如果设置replication 为 async 时, 也可以通过设置搜索请求参数 _preference 为 primary 来 查询主分片, 确保文档是最新版本。 (3) 对于读操作, 可以设置 replication 为 sync(默认), 这使得操作在主分片和副本分片都完成后才会 返回; 如果设置replication 为 async 时, 也可以通过设置搜索请求参数 _preference 为 primary 来 查询主分片, 确保文档是最新版本。 Elasticsearch是如何避免脑裂现象 Elasticsearch是如何避免脑裂现象 Elasticsearch是如何避免脑裂现象 Elasticsearch是如何避免脑裂现象 Elasticsearch是如何避免脑裂现象 Elasticsearch是如何避免脑裂现象 (1) 当集群中 master 候选节点数量不小于3个时( node.master: true), 可以通过设置最少投 票通过数量( discovery.zen.minimum_master_nodes), 设置超过所有候选节点一半以上来解 决脑裂问题, 即设置为 (N/2)+1; (2) 当集群 master 候选节点 只有两个时, 这种情况是不合理的, 最好把另外一个node.master 改成false 。如果我们不改节点设置, 还是套上面的(N/2)+1公式 ,此时 discovery.zen.minimum_master_nodes应该设置为2 。这就出现一个问题, 两个master备选节 点, 只要有一个挂, 就选不出master了 query 和 filter 的区别? query 和 filter 的区别? query 和 filter 的区别? (1)query:查询操作不仅仅会进行查询, 还会计算分值, 用于确定相关度; (2)filter :查询操作仅判断是否满足查询条件, 不会计算任何分值, 也不会关心返回的排序问 题, 同时 ,filter 查询的结果可以被缓存, 提高性能。 (2)filter :查询操作仅判断是否满足查询条件, 不会计算任何分值, 也不会关心返回的排序问 题, 同时 ,filter 查询的结果可以被缓存, 提高性能。

JAVA 精髓面试题 · Elasticsearch 集群、分片、检索与脑裂
http://www.clxhxhhr.top/posts/1574/
作者
clxstart
发布于
2026-09-18
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。