部署 Kyuubi

Kyuubi 高可用指南

师成师成· 更新于 2026-09-29· 阅读 6 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

作为构建在 Apache Spark 之上的企业级即席 SQL 查询服务,Kyuubi 将高可用性(HA)作为主要特性,旨在确保商定的服务可用性水平,例如高于通常水平的正常运行时间。

以 HA 模式运行 Kyuubi,就是使用一组计算机或容器来承载基于 Kyuubi 的 SQL 查询服务,使其能够以最少的停机时间被可靠地使用。Kyuubi 通过使用 Apache ZooKeeper 将冗余的服务实例分组管理,从而在一个或多个组件发生故障时仍然提供持续的服务。

如果没有 HA,一旦某个服务器崩溃,Kyuubi 将不可用,直到崩溃的服务器被修复为止。有了 HA,这种情况将通过硬件/软件故障的自动检测来补救,另一个 Kyuubi 服务实例会立即准备就绪并开始提供服务,而无需人工干预。

HA 架构

目前,Kyuubi 支持通过负载均衡使整个系统实现高可用。

负载均衡旨在优化所有 Kyuubi 服务单元的使用,最大化吞吐量,最小化响应时间,并避免单个单元过载。使用多个 Kyuubi 服务单元进行负载均衡,而不是使用单个单元,可以通过冗余来提高可靠性和可用性。

主要优势

  • 高并发

    • 通过增加或移除 Kyuubi 服务器实例,可以轻松地进行纵向扩展或缩减,以满足客户端请求的需求。
  • 平滑升级

    • Kyuubi 服务器支持优雅停止。我们可以删除一个 k.i.,但不会立即停止它。在这种情况下,该 k.i. 将不再接受任何新的连接请求,只处理来自现有连接的操作请求。当所有连接都释放完毕后,它才会停止。
    • Kyuubi 引擎的依赖项可以随意变更,例如升级版本、修改配置、添加外部 jar、迁移到另一个引擎目录等。所有这些都将在启动和停止期间重新加载。

系统侧部署

在 Kyuubi 部署中应用 HA 时,我们基本上需要关注以下两项配置:

  • kyuubi.ha.addresses - 用于部署 k.i. 的外部 ZooKeeper 集群地址
  • kyuubi.ha.namespace - 根目录,也称为 ServerSpace,用于部署 k.i.

更多配置请参阅 Kyuubi 配置系统简介 的 HA 章节。

伪模式

当未配置 kyuubi.ha.addresses 时,k.i. 将启动一个内嵌的 ZooKeeper 服务,并在其中注册自身的地址。在这种伪模式下,客户端既可以通过原始 IP 地址,也可以通过 zk quorum + namespace 来连接 k.i.。但它不具备任何高可用能力。

生产模式

对于生产环境部署,kyuubi.ha.addresses 需要一个外部 ZooKeeper 集群。在此模式下,多个 K.I.(Kyuubi Instance)可以注册到由 kyuubi.ha.namespace 配置的同一个 ServerSpace 中,并共同提供服务。

客户端使用方式

借助 Kyuubi Hive JDBC Driver 或原生 Hive JDBC Driver,客户端可以在 JDBC 连接串中指定服务发现模式,即 serviceDiscoveryMode=zooKeeper;,并设置 zooKeeperNamespace=kyuubi;,随后便可从指定 ZooKeeper 地址的 /kyuubi 路径下随机选取一个 Kyuubi 服务 URI。

例如:

bin/beeline -u 'jdbc:hive2://10.242.189.214:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi' -n kentyao

如何热升级 Kyuubi Server

Kyuubi 支持对高可用(HA)集群中的某个 Server 进行热升级,且对用户完全透明。

  • 如果你为 Kyuubi Server 指定了自定义端口

    例如,Kyuubi Server 以端口 10009 运行在主机 kyuubi.host 上,你可以使用 bin/kyuubi-ctl 执行以下命令:

    ./bin/kyuubi-ctl delete server --host "kyuubi.host" --port "10009"

Kyuubi 服务器将等待所有会话关闭后停止,之后你便可以启动新的 Kyuubi 服务器。

  • 如果你为 Kyuubi 服务器配置了随机端口

    你可以直接启动新的 Kyuubi 服务器,然后使用 bin/kyuubi-ctl 执行命令:

    ./bin/kyuubi-ctl delete server --host "kyuubi.host" --port "${PORT_FPR_OLD_KYUUBI_SERVER}"

可以通过以下方式找到 ${PORT_FPR_OLD_KYUUBI_SERVER}:

grep "server.KyuubiThriftBinaryFrontendService: Starting and exposing JDBC connection at" logs/kyuubi-*.out

注意:您无需关心旧的 Kyuubi 服务器何时真正停止,因为新的会话将被路由到新的 Kyuubi 服务器等节点。

评论

登录后参与评论

正在加载评论…