• 分布式集群
    • 选举原理
    • 脑裂问题
    • 客户端在和集群连接时,如何选择特定的节点执行请求?
  • 工作原理

    • 详细描述一下Elasticsearch索引文档的过程
    • 详细描述一下Elasticsearch更新和删除文档的过程
    • 详细描述一下Elasticsearch搜索的过程
    • Elasticsearch对于大数据量(上亿量级)的聚合如何实现?
    • 在并发情况下,Elasticsearch如果保证读写一致?
    • Elasticsearch中的倒排索引是什么?
    • Elasticsearch中的分析器是什么?
    • 说说Elasticsearch常用的调优手段?
      (1)64 GB 内存的机器是非常理想的, 但是 32 GB 和 16 GB 机器也是很常见的。少于 8 GB 会适得其反。

      (2)如果你要在更快的 CPUs 和更多的核心之间选择,选择更多的核心更好。多个内核提供

      的额外并发远胜过稍微快一点点的时钟频率。

      (3)如果你负担得起 SSD,它将远远超出任何旋转介质。 基于 SSD 的节点,查询和索引性能 都有提升。如果你负担得起,SSD 是一个好的选择。

      (4)即使数据中心们近在咫尺,也要避免集群跨越多个数据中心。绝对要避免集群跨越大的

      地理距离。

      (5)请确保运行你应用程序的 JVM 和服务器的 JVM 是完全一样的。 在Elasticsearch 的几

      个地方,使用 Java 的本地序列化。

      (6)通过设置 gateway.recover_after_nodes、gateway.expected_nodes、 gateway.recover_after_time 可以在集群重启的时候避免过多的分片交换,这可能会让数

      据恢复从数个小时缩短为几秒钟。

      (7)Elasticsearch 默认被配置为使用单播发现,以防止节点无意中加入集群。只有在同一台 机器上运行的节点才会自动组成集群。最好使用单播代替组播。

      (8)不要随意修改垃圾回收器(CMS)和各个线程池的大小。

      (9)把你的内存的(少于)一半给 Lucene(但不要超过 32 GB!),通过ES_HEAP_SIZE 环境变量设置。

      (10)内存交换到磁盘对服务器性能来说是致命的。如果内存交换到磁盘上,一个100 微秒的 操作可能变成 10 毫秒。 再想想那么多 10 微秒的操作时延累加起来。 不难看出 swapping 对

      于性能是多么可怕。

      (11)Lucene 使用了大 量 的文件。同时,Elasticsearch 在节点和 HTTP 客户端之间进行通 信也使用了大量的套接字。 所有这一切都需要足够的文件描述符。你应该增加你的文件描述 符,设置一个很大的值,如 64,000。

    • 在 Elasticsearch 中,是怎么根据一个词找到对应的倒排索引的?
    • 对于 GC 方面,在使用 Elasticsearch 时要注意什么?