【Java面试】常用中间件

By | 2026 年 3 月 17 日

Zookeeper

zookeeper 是什么?

zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 google chubby 的开源实现,是 hadoop 和 hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

zookeeper 都有哪些功能?

  • 集群管理:监控节点存活状态、运行请求等。
  • 主节点选举:主节点挂掉了之后可以从备用的节点开始新一轮选主,主节点选举说的就是这个选举的过程,使用 zookeeper 可以协助完成这个过程。
  • 分布式锁:zookeeper 提供两种锁:独占锁、共享锁。独占锁即一次只能有一个线程使用资源,共享锁是读锁共享,读写互斥,即可以有多线线程同时读同一个资源,如果要使用写锁也只能有一个线程使用。zookeeper可以对分布式锁进行控制。
  • 命名服务:在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的地址,提供者等信息。

zookeeper 有几种部署模式?

zookeeper 有三种部署模式:

  • 单机部署:一台集群上运行;
  • 集群部署:多台集群运行;
  • 伪集群部署:一台集群启动多个 zookeeper 实例运行。

zookeeper 怎么保证主从节点的状态同步?

zookeeper 的核心是原子广播,这个机制保证了各个 server 之间的同步。实现这个机制的协议叫做 zab 协议。zab 协议有两种模式,分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,zab 就进入了恢复模式,当领导者被选举出来,且大多数 server 完成了和 leader 的状态同步以后,恢复模式就结束了。状态同步保证了 leader 和 server 具有相同的系统状态。

集群中为什么要有主节点?

在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,其他的机器可以共享这个结果,这样可以大大减少重复计算,提高性能,所以就需要主节点。

集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?

可以继续使用,单数服务器只要没超过一半的服务器宕机就可以继续使用。

说一下 zookeeper 的通知机制?

客户端端会对某个 znode 建立一个 watcher 事件,当该 znode 发生变化时,这些客户端会收到 zookeeper 的通知,然后客户端可以根据 znode 变化来做出业务上的改变。

Elasticsearch

解释一下Elasticsearch中的textkeyword字段类型的区别。

  • text:该类型会进行分词处理,将长文本拆分为多个词项,然后建立倒排索引。它主要用于全文检索场景,例如搜索文章内容、商品描述等
  • keyword:该类型不会进行分词,会将整个字段内容作为一个完整的词项存入倒排索引。它主要用于精确匹配、聚合(Aggregation)和排序,例如订单状态、用户ID、邮箱地址等。实际应用中,常用multi-fields特性为一个字段同时定义textkeyword类型,以应对不同场景

Elasticsearch是如何实现Master选举的?如何处理脑裂问题?

  • 选举流程:ES的ZenDiscovery模块负责选主。当一个节点发现集群中不存在活跃主节点时,它会发起选举。所有具备主节点资格(node.master: true)的节点会对所有已知的有资格的节点进行排序(通常按节点ID),并倾向于选举自己知道的第一个节点。如果一个节点获得了超过半数discovery.zen.minimum_master_nodes配置的值)的选票,且该节点也选举了自己,那么它就成为新的主节点
  • 脑裂预防:脑裂是指集群中出现多个主节点的现象。核心解决方法是正确配置 discovery.zen.minimum_master_nodes,其值应设置为有资格成为主节点的节点数 n/2 + 1(即超过半数)。这样,任何时刻最多只有一个分区拥有足够的节点数来选举出主节点,从而避免脑裂。

Elasticsearch有哪些不同的查询类型?请举例说明。

  • 精确查询:如termtermsrange查询,不对查询词进行分析,用于精确匹配条件
  • 全文检索:如matchmatch_phrasemulti_match查询,会对查询文本进行分析(分词),然后去倒排索引中查找
  • 复合查询:如bool查询,通过mustshouldfiltermust_not等子句组合多个查询条件。其中filter子句不计算相关性得分,且结果可被缓存,性能更好
  • 聚合分析:如terms(分组统计)、avg(平均值)、date_histogram(时间直方图)等,用于数据分析

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注