配置 Polaris
配置 Polaris
概述
本页介绍如何配置 Apache Polaris。除非另有说明,本文所述内容同时适用于 Polaris Docker 镜像(以及 Kubernetes 部署)和 Polaris 二进制发行版。
📝 注意
有关生产环境的提示与最佳实践,请参阅 为生产环境配置 Polaris。
首先,Polaris 服务端基于 Quarkus 运行,并使用其配置机制。请阅读 Quarkus 的配置指南以熟悉基础知识。
Quarkus 会从多个来源聚合配置属性,并按特定的优先级顺序应用它们。当某个属性在多个来源中都有定义时,优先级较高的来源中的值会覆盖优先级较低来源中的值。
以下按优先级从高到低列出各来源:
- 系统属性:通过 Java 命令行使用
-Dproperty.name=value设置的属性。 - 环境变量(详见下文的重要说明)。
$PWD/config/application.properties文件中的设置。- Polaris 内置打包的
application.properties文件。 - 默认值:应用程序中硬编码的默认值。
使用环境变量时,有两种命名约定:
如果可能,直接使用属性名作为环境变量名。这在大多数场景下都能正常工作,例如在 Kubernetes 部署中。例如,
polaris.realm-context.realms可以原样写入容器的 YAML 定义:env: - name: "polaris.realm-context.realms" value: "realm1,realm2"但如果是在脚本或 shell 提示符中运行,则适用更严格的命名规则:变量名只能由大写字母、数字和
_(下划线)组成。在这种情况下,必须从属性名推导出环境变量名,方法是将所有字符转换为大写,并把所有点、短横线和引号替换为下划线。例如,polaris.realm-context.realms应转换为POLARIS_REALM_CONTEXT_REALMS。更多详情请参阅此处。
❗重要
虽然使用全大写的环境变量很方便,但对于复杂的属性名可能会带来问题。在这种情况下,建议改用系统属性或配置文件。
如上所述,配置文件也可以在运行时提供;要让 Polaris 服务端识别它,该文件应位于(挂载到)$PWD/config/application.properties。在 Polaris 官方 Docker 镜像中,该路径为 /deployment/config/application.properties。
对于 Kubernetes 部署,配置文件通常定义为 ConfigMap,然后挂载到容器的 /deployment/config/application.properties。该文件可以以只读方式挂载,因为 Polaris 仅在启动时读取一次配置文件。
Polaris 配置选项
有关所有 Polaris 配置选项的完整参考,请参阅配置参考页面。
Quarkus 配置选项
下面列出了一些常用的 Quarkus 配置属性。更多详情请参阅 Quarkus 文档。
| 配置属性 | Polaris 中的默认值 | 说明 |
|---|---|---|
quarkus.log.level | INFO | 定义根日志级别。 |
quarkus.log.category."org.apache.polaris".level | 定义特定类别的日志级别。 | |
quarkus.default-locale | 系统区域设置 | 强制使用特定的区域设置,例如 en_US。 |
quarkus.http.port | 8181 | 定义 HTTP 端口号。 |
quarkus.http.auth.basic | false | 启用 HTTP 基本身份验证。 |
quarkus.http.limits.max-body-size | 10240K | 定义 HTTP 请求体大小上限。 |
quarkus.http.cors.enabled | false | 启用 HTTP CORS 过滤器。必须设置为 true,其他 CORS 属性才会生效。 |
quarkus.management.enabled | true | 启用管理服务器。 |
quarkus.management.port | 8182 | 定义 Polaris 管理服务器的端口号。 |
quarkus.management.root-path | 定义 /metrics 和 /health 端点所基于的根路径。 | |
quarkus.otel.sdk.disabled | true | 启用 OpenTelemetry 层。 |
JVM 配置选项
📝 注意
本节仅适用于 Polaris Docker 镜像和 Kubernetes 部署。
官方 Polaris Docker 镜像中还提供了许多其他可操作的环境变量:
| 环境变量 | 描述 |
|---|---|
JAVA_OPTS 或 JAVA_OPTIONS | 不推荐使用。传递给 java 命令的 JVM 选项(例如:-verbose:class)。设置此变量会覆盖本表中其他所有变量设置的任何选项。若要传递额外设置,请改用 JAVA_OPTS_APPEND。 |
JAVA_OPTS_APPEND | 用户指定的 Java 选项,将被追加到 JAVA_OPTS 中生成的选项之后(例如:-Dsome.property=foo)。 |
JAVA_TOOL_OPTIONS | 此变量由所有 OpenJDK 发行版定义并支持,详见此处。此处定义的选项优先于所有其他选项;通常无需使用此变量,但在某些场景下很有用,例如强制设置 JVM 启动参数、配置远程调试或定义 JVM 代理。 |
JAVA_MAX_MEM_RATIO | 用于根据容器的限制计算默认的最大堆内存。如果在没有为容器设置任何内存限制的容器中使用,则此选项不起作用。如果存在内存限制,则 -XX:MaxRAMPercentage 会被设置为这里所设定的容器可用内存的比例。默认值为 80,表示将可用内存的 80% 作为上限。您可以将此值设置为 0 来跳过此机制,此时将不会添加 -XX:MaxRAMPercentage 选项。 |
JAVA_DEBUG | 如果设置,将启用远程调试。默认禁用(例如:true)。 |
JAVA_DEBUG_PORT | 用于远程调试的端口。默认为 5005(提示:使用 *:5005 可在所有网络接口上启用调试)。 |
GC_MIN_HEAP_FREE_RATIO | GC 后为避免堆扩展所需的最小空闲堆百分比。默认为 10。 |
GC_MAX_HEAP_FREE_RATIO | GC 后为避免堆收缩所需的最大空闲堆百分比。默认为 20。 |
GC_TIME_RATIO | 指定花在垃圾回收之外的时间的比例。默认为 4。 |
GC_ADAPTIVE_SIZE_POLICY_WEIGHT | 当前 GC 时间与之前 GC 时间相比所占的权重。默认为 90。 |
GC_METASPACE_SIZE | 初始元空间大小。没有默认值(例如:20)。 |
GC_MAX_METASPACE_SIZE | 最大元空间大小。没有默认值(例如:100)。 |
GC_CONTAINER_OPTIONS | 指定要使用的 Java GC。此变量的值应包含指定所需 GC 所必需的 JRE 命令行选项,它将覆盖默认的 -XX:+UseParallelGC(例如:-XX:+UseG1GC)。 |
以下是几个示例:
| 示例 | docker run 选项 |
|---|---|
| 使用其他垃圾回收器 | -e GC_CONTAINER_OPTIONS="-XX:+UseShenandoahGC" 让 Polaris 使用 Shenandoah GC,而非默认的并行 GC。 |
| 将 Java 堆大小设置为固定值 | -e JAVA_OPTS_APPEND="-Xms8g -Xmx8g" 让 Polaris 使用 8g 的 Java 堆。 |
| 设置最大堆内存百分比 | -e JAVA_MAX_MEM_RATIO="70" 让 Polaris 使用可用内存的 70%。 |
排查配置问题
如果遇到配置相关的问题,可以让 Polaris 打印出它正在使用的配置。为此,请将 io.smallrye.config 日志类别的日志级别设置为 DEBUG,并同时将控制台附加器的级别设置为 DEBUG:
quarkus.log.console.level=DEBUG
quarkus.log.category."io.smallrye.config".level=DEBUG❗重要提示
这会打印出所有配置值,包括密码等敏感信息。请勿在生产环境中执行,也不要与任何你不信任的人分享这些输出!
评论
登录后参与评论
KnowForge